728x90
2292번: 벌집
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
www.acmicpc.net
동적계획법으로 풀었다.
2-tuple인 pair를 만들어서 첫 번째 원소에는 1로부터 i만큼 떨어져있는 벌집들 중 가장 작은 번호를 가진 벌집의 번호를, 두 번째 원소에는 1로부터 i만큼 떨어져 있는 벌집들 중 가장 큰 번호를 가진 벌집의 번호를 저장해서 벡터에 저장했다.
#include <iostream>
#include <tuple>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<pair<int, int>> room;
room.push_back(make_pair(1, 1));
room.push_back(make_pair(2, 7));
int i = 2;
while (room[i - 1].second < n) {
room.push_back(make_pair(room[i - 1].second + 1, room[i - 1].second + 6 * i));
i++;
}
if (n == 1) cout << 1;
else cout << i;
return 0;
}
728x90
'알고리즘 문제' 카테고리의 다른 글
[백준] 11726번 2×n 타일링 (0) | 2020.02.01 |
---|---|
[백준] 10844번 쉬운 계단 수 (0) | 2020.01.31 |
[백준] 2193번 이친수 (0) | 2020.01.31 |
[백준] 1193번 분수찾기 (0) | 2020.01.31 |
[백준] 2751번 수 정렬하기 2 (0) | 2020.01.31 |