참고: https://www.acmicpc.net/problem/2292
✔️ 문제
문제는 다음과 같다.
✔️ 풀이
N은 1부터 10억개 사이에서 값이 주어지는데,
그림으로 이해해보면 다음과 같다.
1에서 출발하여 13까지 도달할 수 있는 최소 개수는 3이고,
1에서 출발하여 58까지 도달할 수 있는 최소 개수는 5이다.
일직선 상에 놓여져있는 것은 그대로 일직선의 개수를,
일직선 상에 없는 것은 일직선의 개수+1만큼을 출력하게 된다.
우선 메모장에 적어가면서 규칙을 찾아보았는데,
지나는 방의 개수가 1씩 증가할 때마다
범위의 처음은 2부터 출발하여 이전 수에 (n-1)*6 만큼을 더해주고
범위의 끝은 다음 첫 수에 n*6 만큼을 더해주는 것이었다.
그리고 나서 해당 범위에 일치하는 n값에 1을 더한 만큼을
찾아주면 되고 이를 코드로 나타내면 다음과 같다.
N=int(input())
a=2
for i in range(0, N):
s=a+(i)*6
if s <= N < s+(i+1)*6:
print(i+2)
break
a=s
1 다음으로 벌집이 시작하는 값은 2이기 때문에
2를 변수 하나에 담아주고 해당 공식을 코드로 나타낸다.
이때, 범위가 0부터 출발하기 때문에 출력하는 값에는
1부터 시작하는 +1과 일치하는 값에 1을 더한 만큼 +1을
합산한 +2만큼을 출력해주면 된다. 또한, 2를 담아준
변수 a에는 이전 값을 넣어주어야한다.
이렇게 코드를 작성하고 제출하게 되면,
틀렸습니다라는 결과를 맞이할 수 있다(?)
결과가 100% 끝에 가서 틀렸습니다라고 나오는데,
다시 생각해보니 N의 범위가 1부터였고
해당 코드는 1에 대한 결과는 출력하지 않기 때문이였다.
N=int(input())
a=2
if N==1:print(1)
for i in range(0, N):
s=a+(i)*6
if s <= N < s+(i+1)*6:
print(i+2)
break
a=s
그래서 1에 대한 경우의 수를 넣고
다시 제출하니 맞은 결과를 확인할 수 있다.
화이팅 💪
'알고리즘(algo) > 백준' 카테고리의 다른 글
[백준] 1193번 - 분수찾기 (0) | 2023.01.23 |
---|---|
[백준] 10250번 - ACM 호텔 (0) | 2023.01.23 |
[백준] 1712번 - 손익분기점 (0) | 2023.01.22 |
[백준] 2563번 - 색종이 (0) | 2023.01.21 |
[백준] 2566번 - 최댓값 (0) | 2023.01.21 |