※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀 더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소입니다.
https://codeup.kr/problem.php?id=1486
1. 문제
2. 문제 해석
3. 소스 코드
문제
다음과 같은 n*m 배열 구조를 출력해보자. |
입력
첫 번째 줄에 배열의 크기 n m이 입력된다. |
출력
n*m 크기의 배열을 설명과 같이 채워 출력한다. |
입력 예시
2 3 |
출력 예시
5 6 1 4 3 2 |
2. 문제풀이
정보처리기사 알고리즘 예시에도 비슷하게 나와있는 문제입니다. 오른쪽 위에서부터 출발합니다. 반바퀴씩 돌때마다 limit를 증가시키기 때문에 여기에 유의하셔야 합니다. 1. 행이 증가합니다. 2. 뒤부터는 감소가되므로 더해주는 부분을 뒤집습니다. reverse = -reverse; or reverse *= -1; 3. 열이 감소합니다. 3. 행이 감소합니다. 4. 뒤부터는 증가가 되므로 더해주는 부분을 뒤집습니다. reverse = -reverse; or reverse *= -1; 4. 열이 증가합니다. col = 0 -> m-2;
시작하는 위치와 뒤집는 부분을 파악하시면 금방 푸는 문제입니다. |
3. 소스코드
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
|
#include <iostream>
using namespace std;
int main() {
int a[100][100]{ 0 }, n, m, reverse = 1;
cin >> n >> m;
int row = -1, col = m - 1;
int limit = 0;
//총반복의 횟수는 n*m의 숫자까지
for (int count = 1; count <= m * n;) {
//세로 채우기
for (int i = 0; i < n - limit; i++) {
row += reverse;
a[row][col] = count++;
}
//반복이 한번될때마다 역전시킨다.
reverse = -reverse;
//가로채우기
for (int i = 0; i < m - limit - 1; i++) {
col += reverse;
a[row][col] = count++;
}
//최대 반복횟수 감소
limit++;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
cout << a[i][j] << " ";
cout << endl;
}
return 0;
}
|
'코딩테스트 > 코드업' 카테고리의 다른 글
1차원 차이 배열 만들기 5-3 C++(1494)[코드업, codeup] (0) | 2019.12.25 |
---|---|
2차원 누적 합 배열 만들기 5-2 C++(1493)[코드업, code up] (0) | 2019.12.24 |
2차원 배열 달팽이 채우기 4-1 C++(1484)[코드업, code up] (0) | 2019.12.22 |
2차원 배열 빗금 채우기 3-3 C++(1478)[code up,코드업] (0) | 2019.12.21 |
2차원 배열 빗금 채우기 3-1 C++(1476)[코드업, code up] (0) | 2019.12.19 |
댓글