[백준] 1913번: 달팽이
2022. 9. 20. 15:31ㆍTIL💡/Algorithms
https://www.acmicpc.net/problem/1913
2차원 배열 구현 기술을 키우기 위해 도전한 문제이다. 실버3임에도 불구하고 너무 오래 걸렸다..ㅠ
참고로 현재 회사의 면접 내 라이브 코딩테스트에서도 이와 유사한 문제를 풀었는데, 그때는 실패했기 때문에 더욱 절치부심하면서 풀고 있다.
이런 문제는 말그대로 작은 숫자부터 시작해서 점화식을 잘 만들면 아무리 큰 숫자가 와도 금방 풀기에 좋다.
여기서 나는 n 바퀴마다 한 바퀴의 길이, 시작점을 기준으로 2차원 배열을 채워나갔다.
한 바퀴를 4등분하여 한줄씩 채워나갔다.
#include <iostream>
using namespace std;
int arr[999][999];
int main() {
int n, num, x = 0 ,y = 0;
cin >> n >> num;
int t = n / 2;
int d = 1;
while(t >= 0) {
int start;
int len = 2 * (n / 2 - t) + 1;
if(t == n / 2) {
start = t;
if(d == num) {
x = start;
y = start;
}
arr[start][start] = d++;
t--;
continue;
}
else {
start = t;
t--;
}
for(int i = start + 1;i < start + len;i++) {
if(d == num) {
x = start;
y = i;
}
arr[start][i] = d++;
}
for(int i = start + 1;i < start + len;i++) {
if(d == num) {
x = i;
y = start + len - 1;
}
arr[i][start + len - 1] = d++;
}
for(int i = start + len - 2;i >= start;i--) {
if(d == num) {
x = start + len - 1;
y = i;
}
arr[start + len - 1][i] = d++;
}
for(int i = start + len - 2;i >= start;i--) {
if(d == num) {
x = i;
y = start;
}
arr[i][start] = d++;
}
}
for(int i = 0;i < n;i++) {
for(int j = 0;j < n;j++) {
cout << arr[i][j] << " ";
}
cout << '\n';
}
cout << x + 1 << " " << y + 1 << '\n';;
}
'TIL💡 > Algorithms' 카테고리의 다른 글
[백준] 2075번: N번째 큰 수 (0) | 2022.09.20 |
---|---|
[백준] 1959번: 달팽이3 (0) | 2022.09.20 |
[백준] 1890번: 점프 (0) | 2022.09.20 |
2차원 배열 쓰지 않고 달팽이 배열 만들기 (0) | 2022.09.19 |
[백준] 2011번: 암호코드 (0) | 2022.09.19 |