문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
배운 점
완전탐색 문제를 선택해서 완전탐색 문제인지는 알고있었다. 그래도 처음 봤다고 생각하고 이 문제를 어떻게 풀지 생각했다.
- 규칙 찾기 시도
- yellow가 24개이고 24x1 줄 일때 브라운은 26+26+1+1= 54 개이다
- yellow가 24개이고 12x2 줄 일때 브라운은 14+14+2+2= 30 개이다
- yellow가 24개이고 8x3 줄 일때 브라운은 10+10+3+3 = 26 개이다
- yellow가 24개이고 6x4 줄 일때 브라운은 8+8+4+4 = 24개이다
- 공식이 보인다.
- (엘로우 가로+ 2 + 옐로우 세로)*2가 브라운의 개수이다.
- 옐로우가로는 옐로우세로가 +1 할 때마다 전체 개수에서 나눠 준 값이다.
- 옐로우 세로 +1 하며 탐색하면 되겠다.
처음 코드
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
int value = 0;
int width =0;
int height = 0;
while(value != brown){
width++;
height = yellow/width;
value = (height+2+width)*2;
if (value == brown){
answer[0] =(height+2);
answer[1] = (width+2);
}
}
return answer;
}
}
테스트 케이스 6개 성공 4 개 실패
이유: 옐로우가 3x3인 경우 while문을 돌다 width가 2인경우height는 소수이다. int로 선언되어 있기 때문에 실패
정답 코드
class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
int value = 0;
int width =0;
int height = 0;
while(value != brown){
width++;
if(yellow%width == 0){
height = yellow/width;
value = (height+2+width)*2;
if (value == brown){
answer[0] =(height+2);
answer[1] = (width+2);
}
}
}
return answer;
}
}
'알고리즘' 카테고리의 다른 글
[프로그래머스] Lv2 두 원 사이의 정수 쌍 (5) | 2024.03.12 |
---|---|
[프로그래머스] 소수찾기(완전탐색, 소수 찾기) (0) | 2024.02.23 |
완전탐색(브루트 포스), 백트래킹 (0) | 2024.02.23 |
[프로그래머스] 요격 시스템(정렬, 그리드 / 자바) (0) | 2024.02.20 |
[백준] 좌표 정렬 11650번 (이차원 배열 정렬) (0) | 2024.02.20 |