https://www.acmicpc.net/problem/1057
안녕하세요
오늘 풀 문제는 백준 1057번, 실버4입니다.
c/c++로 계속 코테를 준비해오다가 최근 python을 거치고 nodejs로 왔습니다 .. ㅎㅎ
🔽 입력 조건
- 첫째 줄에 차례대로 N A B 를 입력받음.
- N은 참가자의 수 (2보다 크거나 같고, 100,000보다 작거나 같은 자연수)
- A는 김지민의 번호, B는 임한수의 번호이다.
- A, B는 N보다 작거나 같은 자연수, 서로 다르다.
🔽 출력 조건
- 첫째 줄에 김지민과 임한수가 대결하는 라운드 번호를 출력한다.
- 만약 서로 대결하지 않을 때는 -1을 출력한다. (<- 이런 경우가 존재하나? 라는 의문은 든다.)
🔽 입출력
입출력부터 까다롭더라구요
우선 입출력 부터 확인해보겠습니다.
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const N = parseInt(input[0].split(' ')[0]);
let A = parseInt(input[0].split(' ')[1]);
let B = parseInt(input[0].split(' ')[2]);
🔽 아이디어
- 초기 값 세팅
- A, B는 현재 번호
- round = 1로 시작
- 라운드 반복
- A와 B가 같아질 때까지 반복.
- A와 B를 (A + 1) // 2, (B + 1) // 2로 업데이트.
- 각 반복마다 round++
- 종료 : A와 B가 같아졌을 때
- 그때의 round를 출력.
- 공통 부모를 찾는 과정이 (번호+1)//2로 자연스럽게 처리됨
🔽 코드
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const N = parseInt(input[0].split(' ')[0]);
let A = parseInt(input[0].split(' ')[1]);
let B = parseInt(input[0].split(' ')[2]);
let round = 0;
while (A != B) {
A = Math.ceil(A / 2);
B = Math.ceil(B / 2);
round++;
}
console.log(round > 0 ? round : -1);
'algorithm > baekjoon' 카테고리의 다른 글
[C/C++] 백준 9252번 (1) | 2025.01.12 |
---|---|
[C/C++] 백준 14002번 (1) | 2025.01.11 |
[C/C++] 백준 11055번 (0) | 2025.01.10 |
[C/C++] 백준 11053번 (0) | 2025.01.09 |
[C/C++] 백준 1912번 (2) | 2025.01.08 |