https://www.acmicpc.net/problem/2292
1번방 부터 n번방 까지의 최소거리를 구하는 문제이다.
접근방법은 규칙파악이었다.
뭔가 육각형으로 쭉 둘러쌓여있으니까, 숫자 6과 관련된 규칙이지 않을까 생각했다.
1부터 시작해서 맨바깥테두리를 한번씩 채울때 마다 몇개의 육각형이 있는지 세어 봤다.
1, 6, 2*6, 3*6, 4*6 ... 순이다. 점화식을 세워보면 6^k (k >=0 인 정수) 로 나타 낼수 있다.
뭔가 다 파악해놓고 1시간가량 머리가 뜨거워 졌다
위에 말한걸 그대로 코드로 옮기기만 하면 정답이다 이런
육각형의 테두리밖에 둘러쌓인 하나의 단을 깊이라고 한다면, 1로부터 떨어진 깊이가 바로 최소거리이다.
#include <iostream>
using namespace std;
int n;
//1, 6, 2*6, 3*6, 4*6
int main(){
cin >> n;
n -= 1;
int k = 1;
while (n>0) {
n -= 6 * k;
k++;
}
cout << k;
}
이 문제가 왜 오래걸렸는진 모르겠지만, 생각한걸 코드로 바꾸는 연습을 더 많이 해야겠다.
'Algorithm > 구현, 시뮬레이션' 카테고리의 다른 글
[BAEKJOON] 10431번 줄세우기 (1) | 2024.03.19 |
---|---|
[BAEKJOON] 9655번 돌게임 (1) | 2024.03.19 |
[BAEKJOON] 1157번 단어 공부 (1) | 2024.03.18 |
[BAEKJOON] 5073번 삼각형과 세 변 (1) | 2024.03.18 |
[BAEKJOON] 23971번 ZOAC 4 (0) | 2024.03.18 |