코드
#include <iostream>
#include <algorithm>
using namespace std;
int n,m,a[1000][1000],temp,resx,resy;
int main() {
cin >> n;
cin >> m;
int istnum = n*n;
temp = n;
int start = 0; // 시작점을 구해줄 변수
int end = 0; // 끝나는 지점을 알려줄 변수
while(n) {
// 왼쪽 변
for(int i = start; i < n; i++) {
a[i][start] = istnum--;
}
// 밑변
for(int i = start + 1; i < n; i++) {
a[n - 1][i] = istnum--;
}
// 오른쪽 변
for(int i = n - 2; i >= end; i--) {
a[i][n - 1] = istnum--;
}
// 위변
for(int i = n - 2; i > end; i--) {
a[start][i] = istnum--;
}
start++;
end++;
n--;
}
for(int i = 0; i < temp; i++) {
for(int j = 0; j < temp; j++) {
cout << a[i][j] << " ";
if(a[i][j] == m) {
resx = i + 1;
resy = j + 1;
}
}
cout << '\n';
}
cout << resx << " " << resy << "\n";
return 0;
}
가장 바깥쪽 변을 구하는 식을 만든 후, start와 end 변수를 이용해서 안쪽까지 구해주었다. 처음에는 start 변수만을 이용했는데, 잘 되지 않았다. end 변수 사용도 떠올렸는데 한 가지만으로 해결해보려고 했나... 안된다는 것을 깨달은 후에 end 변수를 만들어서 해결했다. 구현/시뮬레이션은 문제에서 준대로 따라가기만 하면 되는데, 구현력이 부족해서 어려움을 겪을 때가 많다. 구현력을 키워야겠다.
'백준' 카테고리의 다른 글
[백준] 9625번 BABBA C++ 코드 (0) | 2024.07.27 |
---|---|
[백준] 2108번 통계학 C++ 코드 (0) | 2024.07.27 |
[백준] 6603번 로또 C++ 코드 (0) | 2024.07.25 |
[백준] 9184번 신나는 함수 실행 C++ 코드 (0) | 2024.07.15 |
[백준] 12015번 가장 긴 증가하는 부분 수열 2 C++ 코드 (0) | 2024.07.08 |