알고리즘/백준
[백준] 10836번 여왕벌
JeongHyeon
2017. 11. 23. 15:38
문제
https://www.acmicpc.net/problem/10836
문제요약
1. M*M 크기의 벌집이 주어진다.
2. 벌집을 나타내는 배열의 원소는 애벌레의 크기를 나타내는 데 이 애벌레들은 하루에 한번 자란다.
3. 날마다 애벌레가 자라는 크기는 다르다.
4. 입력으로 날마다 자라는 크기가 주어진다
5. 제일 왼쪽 열과, 제일 위쪽 행의 애벌레들은 자신이 자라는 정도를 스스로 결정한다.
풀이과정
이런 문제를 많이 풀어보지 못해서 접근하는 게 힘들었다. 출력되는 수들을 잘보면 규칙을 찾을 수 있다.
--> 첫 번째 열을 제외한 나머지 열들은 맨 위 원소와 값은 값을 가진다. 를 이용하여 해결했다
소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #include <iostream> #include <vector> using namespace std; int main() { // M : 격자칸 크기, N : 날짜수 int M, N; cin >> M >> N; // 자라나는 크기를 저장하는 벡터 vector<int> border(2*M-1, 1); // 마지막날까지 자라나는 크기를 모두 더해서 저장한다. // 첫번째 열을 제외한 나머지 열의 값은 한개의 열씩 동일한 값을 가진다. while (N--) { int zero, one, two; cin >> zero >> one >> two; // 0의 개수만큼 뛰고 다음부터 1의 개수만큼 해당 원소를 1 증가시킨다 for (int i = zero; i < zero + one; i++) { border[i]++; } // 0,1의 개수만큼 뛰고 2의 개수만큼 2 증가시킨다. for (int i = zero + one; i < 2 * M - 1; i++) { border[i] += 2; } } for (int i = 0; i < M; i++) { for (int j = 0; j < M; j++) { // 첫 번째 열 if (j == 0) cout << border[M - i - 1] << ' '; // 나머지 열 else cout << border[M + j - 1] << ' '; } cout << endl; } return 0; } | cs |