Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 유니티3d
- 퐁
- 토이 프로젝트
- 1인 게임 제작
- 자바스크립트 게임
- Unity2D
- 정처기 필기
- 정보처리기사
- 3회차
- 1인 게임 개발
- 게임제작
- Unity
- Vampire Survivors
- 1인 개발
- 프로그래머스 #최소힙 #우선순위 큐
- Pong
- 유니티
- 유니티 3D
- 정처기
- portal
- 1인 게임
- 합격
- unity3d
- FPS
- 게임
- 게임 개발
- 필기
- 게임 제작
- 자바스크립트
- Unity #Unity2D #Portal
Archives
- Today
- Total
Coding Feature.
백준) 1913번: 달팽이 in C 본문
Solution
특정 알고리즘 없이 단순히 구현하는 문제이다.
먼저 예시를 통해 달팽이 모양으로 2차원 배열에 수열이 만들어지는 패턴을 파악해보았다.
N = 5인 경우, 2차원 배열로 보면
가운데 row : 5 / 2 = 2, column : 5 / 2 = 2 index부터 위로 +1, 우측 +1, 아래로 +2, 좌측 +2, 위로 +3 ..
이런 식의 패턴을 확인할 수 있었다.
위, 우측, 아래, 좌측으로 수열을 입력하는 것을 한 사이클로 잡으면,
총 사이클의 수는 N / 2 = 5 / 2 = 2 번이다.
그리고 사이클 이후에 위 그림의 빨간색 화살표를 추가로 입력하면 전체 달팽이가 완성이 되는 것이다.
위 패턴을 그대로 코드로 풀이하면 된다.
Code
#include <stdio.h>
int arr[999][999] = {0, };
int main(){
int N, find, count = 1, size = 1, row, col, i, j, answer_row, answer_col;
scanf("%d", &N);
scanf("%d", &find);
row = N / 2;
col = N / 2;
arr[row][col] = count++;
for(j=0;j<N/2;j++){ // 한 사이클
for(i=1;i<=size;i++)
arr[--row][col] = count++; // 위로 이동
for(i=1;i<=size;i++)
arr[row][++col] = count++; // 우측으로 이동
size++;
for(i=1;i<=size;i++)
arr[++row][col] = count++; // 아래로 이동
for(i=1;i<=size;i++)
arr[row][--col] = count++; // 좌측으로 이동
size++;
}
for(i=1;i<=size-1;i++)
arr[--row][col] = count++; // 위로 추가 이동
for(i=0;i<N;i++){
for(j=0;j<N;j++){
printf("%d ", arr[i][j]);
if(arr[i][j] == find){
answer_row = i+1;
answer_col = j+1;
}
}
printf("\n");
}
printf("%d %d\n", answer_row, answer_col);
return 0;
}
'코딩테스트 > 백준 solved.ac' 카테고리의 다른 글
백준) 16985번: Maaaaaaaaaze in C (0) | 2023.07.29 |
---|---|
백준) 16236번: 아기 상어 in C (0) | 2023.07.29 |
백준) 16937번: 두 스티커 in C (0) | 2023.07.27 |
백준) 1695번: 팰린드롬 만들기 in C (0) | 2023.07.27 |
백준) 1697번: 숨바꼭질 in C (0) | 2023.07.26 |