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
- Design Pattern
- 디자인패턴
- Meta Quest3
- 프로그래머스
- spring
- 블록
- d4
- 이니셔티브 q
- 논블록
- Initiative Q
- 자료구조
- 알고리즘
- Java
- SOLID
- level2
- 삼성 SW 역량 테스트 기출 문제
- 리퍼럴
- SWEA
- D3
- 점프 점프
- 백준
- 11060
- 10505
- 어싱크
- 재밌게 할래요
- BOJ
- D2
- C++
- 메타퀘스트3
- 레퍼럴
Archives
- Today
- Total
아직은 정체성이 없는 블로그
[SWEA][D2][c++] 1954. 달팽이 숫자 본문
문제
1954. 달팽이 숫자
문제 링크
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
풀이과정
1. 시계 방향의 방향을 가리키는 배열을 생성한다(아래 소스코드에서의 dx, dy).
2. 현재 위치에서 앞으로 갈 곳이 위치가 배열의 크기를 벗어나는지, 이미 숫자가 채워졌는지 확인한다.
3. 크기를 벗어났거나 이미 숫자가 채워졌다면 방향을 바꾼다.
4. 정상적이라면 현재 cnt 값을 저장하고 +1을 한 뒤 i, j (현재 위치)를 ty, tx (갈 곳)로 갱신한다.
5. 2~4위 과정을 반복하고 cnt가 마지막으로 들어갈 숫자보다 커진다면 반복문을 종료한다.
다른 사람들의 풀이과정을 보면 재귀로 푼 사람들도 많아짔만 이 방법이 편하다고 생각되어서 이렇게 풀었다.
소스코드
#include<iostream>
#include<cstring>
using namespace std;
//방향
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
int main(int argc, char** argv)
{
int map[10][10];
int test_case;
int T;
cin>>T;
for(test_case = 1; test_case <= T; ++test_case)
{
memset(map,0,sizeof(map));
int n;
cin >> n;
int i=0,j=0,dir=0;
map[0][0]=1;
int cnt=2;
int size=n*n;
while(size>=cnt){
//앞으로 갈 곳 위치
int ty=i+dy[dir];
int tx=j+dx[dir];
//갈 방향이 배열의 크기를 벗어나거나
//이미 숫자가 쓰여진 경우 방향을 바꿈
if(ty<0 || tx<0 || ty>=n ||tx>=n || map[ty][tx]>0){
dir+=1;
if(dir==4)
dir=0;
continue;
}
map[ty][tx]=cnt;
i=ty;
j=tx;
cnt++;
}
//출력
cout << "#"<<test_case<<"\n";
for(i=0; i<n; i++){
for(j=0; j<n; j++){
cout<<map[i][j]<<" ";
}
cout<<"\n";
}
}
return 0;
}
'알고리즘 역량테스트 문제 > SWEA' 카테고리의 다른 글
[SWEA][D4][c++] 1249. [S/W 문제해결 응용] 4일차 - 보급로 (4) | 2020.07.08 |
---|---|
[SWEA][D4][c++] 3752. 가능한 시험 점수 (0) | 2020.07.08 |
[SWEA][D2][c++] 1961. 숫자 배열 회전 (0) | 2020.07.04 |
[SWEA][D2][c++] 1966. 숫자를 정렬하자 (0) | 2020.07.04 |
[SWEA][D2][c++] 1970. 쉬운 거스름돈 (0) | 2020.07.04 |
Comments