문제의 그림만 보고 생각하면 어떻게 풀어야 할지 감이 잘 안온다. 표를 만들어서 한번 보자
최소 방번호 ~ 최대 방번호 | 해당 층의 방 갯수 | 거리 |
1 | 1 - 1층 | 1 |
2 ~ 7 | 6 - 2층 | 2 |
8 ~ 19 | 12 - 3층 | 3 |
20 ~ 37 | 18 - 4층 | 4 |
38 ~ 61 | 24 - 5층 | 5 |
표를 자세히 보면 방이 1개일때를 제외하고는 층이 바뀔때 마다 방이 6의 배수로 늘어나는 것을 볼 수 있다.
또한 1층을 제외한 층의 최소 방번호 역시 최소 방번호 + 해당 층의 방 갯수를 더하면 다음 층의 최소 방번호가 나오는 것을 알 수 있다.
이것을 힌트로 코드를 작성해보자
int range = 2;
int count = 1;
while (range <= N) {
range += 6 * count;
count ++;
}
System.out.println(count);
1층일 때는 어차피 1이므로 제외하고 range를 2층의 최소 방번호 부터 시작해보자. (여기서 N은 입력 방 번호값이다)
사용자가 N을 입력하면 range를 2층부터 방의 수를 계속 더해주어 N보다 커지면 중지시키는 알고리즘이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
if (N == 1) {
System.out.println(N);
return;
} else {
int range = 2;
int count = 1;
while (range <= N) {
range += 6 * count;
count ++;
}
System.out.println(count);
}
}
}
'알고리즘 > 문제풀이' 카테고리의 다른 글
백준 온라인저지 2941번 Java (0) | 2021.06.20 |
---|