https://school.programmers.co.kr/learn/courses/30/lessons/12985
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Level 2. 예상 대진표
접근 방식
참가자가 짝수번호를 가지고 있다면, 다음 라운드에서는 a/2의 번호가 된다.
b참가자 역시 동일한 방법으로 번호를 가지게 되고, a와 b의 번호가 1 차이가 나며 둘 중의 큰 수를 가지는 참가자가 짝수 번호를 가지고 있을 때에 a와 b의 참가자가 만나는 라운드이다.
처음 코드
public static int Study(int N, int a, int b) {
int answer = 0;
int i=1;
while((Math.max(a, b)-1!=Math.min(a, b)) && (Math.max(a, b)%2 !=0)) {
System.out.println("a: "+ a +", b: "+ b);
if(a%2==0) {
a = a/2;
}
else {
a = (a+1)/2;
}
if(b%2==0) {
b = b/2;
}
else{
b = (b+1)/2;
}
i++;
}
System.out.println(i);
answer = i;
return answer;
}
분명 여기까지 확실한 거 같은데.. 한참을 고민했다.
이 코드를 작성하기까지는 많은 시간을 들이지는 않았는데, 여기서 아무리 해도 정확도가 20프로가 나와서 뭐가 문젠지 계아무래도 모르겠어서 정말 많이 고민하다가 혹시나 싶어서, while 문의 조건문이 and가 아니라 or인가.. 혹시나.. 해서 다시 해봤다
최종 코드
public static int Study(int N, int a, int b) {
int answer = 0;
int i=1;
while((Math.max(a, b)-1!=Math.min(a, b)) || (Math.max(a, b)%2 !=0)) {
System.out.println("a: "+ a +", b: "+ b);
if(a%2==0) {
a = a/2;
}
else {
a = (a+1)/2;
}
if(b%2==0) {
b = b/2;
b = (b+1)/2;
}
i++;
}
System.out.println(i);
answer = i;
return answer;
}
고찰
혹시나가 역시나라고.. 우려했던 부분이 틀렸던 게 맞았다. 너무너무 허무했다..
분명 맞는 것 같은데 틀릴 리가 없는데 했는데.....
이 문제는 a와 b가 짝수냐 홀수냐에 따라서 다음 라운드에 가지는 숫자가 달라지게 되므로, 해당 포인트를 집어내는 것이 중요하다고 생각된다.
'알고리즘 > Java' 카테고리의 다른 글
[프로그래머스 ] Java - 점프와 순간 이동 (0) | 2023.04.28 |
---|---|
[프로그래머스] Java - N개의 최소공배수 (0) | 2023.04.28 |
[프로그래머스] Java - 짝지어 제거하기 (0) | 2023.04.26 |
[프로그래머스] Java - 카펫 (0) | 2023.04.26 |
[프로그래머스] Java - 영어 끝말잇기 (0) | 2023.04.25 |