문제 설명
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 풀이 (java)
class Solution {
public int[] solution(int brown, int yellow) {
// 수학적 풀이 필요 (1.for문 사용 2.근의공식) => 1로 풀었지만, 2가 성능이 좋음
// yellow*brown = 가로*세로
// yellow = (가로-2)*(세로-2)
int[] answer = new int[2];
for (int tempWidth = yellow+2; tempWidth > 0; tempWidth--) {
int tempHeight = (brown+yellow)/tempWidth;
if((tempWidth-2) * (tempHeight-2) == yellow){
answer[0]=tempWidth;
answer[1]=tempHeight;
break;
}
}
return answer;
}
}
풀이 방법
- 수학적 풀이 필요 (1.for문 사용 2.근의공식) => 1로 풀었지만, 2가 성능이 좋음
- yellow*brown = 가로*세로
- yellow = (가로-2)*(세로-2)
다른사람의 풀이 (java)
Good Idea : 근의 공식을 구현해 계산 -> 그렇다면, for문을 돌리지않고, 계산식만 한번 구하면 되기 때문에 성능이 아주 좋음 (단 가독성은 좀 떨어질수도..)
느낀점
코테에서는 종종 수학적 접근법이 중요한 경우가 있다.
그렇지 않으면, 모든 경우를 뒤져보면 된다
'개발 > 코딩 테스트' 카테고리의 다른 글
[알고리즘] 프로그래머스 > 완전탐색 > 최소 직사각형 (0) | 2022.08.16 |
---|---|
[알고리즘] 프로그래머스 > 힙 > 디스크 컨트롤 (1) | 2022.08.16 |
[알고리즘] 프로그래머스 > 힙 > 이중우선순위큐 (0) | 2022.08.10 |
[알고리즘] 프로그래머스 > 해시 > 베스트앨범 (0) | 2022.08.10 |
[알고리즘] 프로그래머스 > 힙 > 더 맵게 (0) | 2022.08.09 |