일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 엘리스AI트랙데모데이
- 웹개발포트폴리오
- 부트캠프프로젝트발표
- 블로그와 친해지기
- 엘리스
- 프로젝트마무리
- fabricjs
- reactStrictMode
- 웹개발프로젝트
- 엘리스AI트랙
- 와탭랩스
- aws_s3
- pymupdf
- 이미지처리프로젝트
- Python
- 코딩배우기
- FLASK
- 코딩 국비지원
- REACT
- tempfile
- 프레임워크vs라이브러리
- 코딩국비지원
- devmode
- 코딩교육
- 팀프로젝트
- after_this_request
- 엘리스 AI 트랙
- 개발자 채용설명회
- 인공지능모델학습
- 코딩부트캠프
Archives
- Today
- Total
자몽이 조아
[프로그래머스]정수를 나선형으로 배치하기 본문
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/181832
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
function solution(n) {
//1. 배열초기화
const answer = new Array(n).fill(0).map(()=>[...Array(n).fill(0)])
let dir = 'r'
//2. 채우기
//위치 변경해가면서 채우기
// rdlu
let x = 0;
let y = 0;
for(i=1;i<(n*n)+1;i++){
answer[y][x] = i;
if(dir == 'r'){
if(x+1<n && answer[y][x+1] == 0){
x+=1;
} else{
dir = 'd'
y+=1;
}
continue;
}
else if(dir == 'd'){
if(y+1<n && answer[y+1][x] == 0){
y+=1;
} else{
dir = 'l'
x-=1
}
continue;
}
else if(dir=='l'){
if(x>=1 && answer[y][x-1] == 0){
x-=1;
} else{
dir = 'u'
y-=1;
}
continue;
}
else if(dir=='u'){
if(y>=1 && answer[y-1][x] == 0){
y-=1;
} else{
dir = 'r'
x+=1;
}
continue;
}
}
// answer[x][y] = i + 1
// 순서대로 돌아가면서 1씩 증가해서 채울거고
// x,y의 방향만 내가 돌아가면서 고칠거야
//방향 전환 조건
// 처음에는 n-1인지 확인한다
// 그 다음부터는 이미 차있을때. 아무것도 안하고 각 방향의 다음 방향으로 돌려주기.
return answer;
}
처음 시작할때 일단 채운다. 그리고 조건문에서 그 다음값에 대한 검증을 미리 하고, 좌표만 바꿔준다.
다른사람 답 분석
더보기
function solution(n) {
const move = [[0, 1], [1, 0], [0, -1], [-1, 0]];
const answer = Array.from(new Array(n), () => new Array(n).fill(0))
let x = 0, y = 0, dir = 0, num = 1;
while(num <= n * n) {
answer[x][y] = num;
let nextX = x + move[dir][0];
let nextY = y + move[dir][1];
if (nextX >= n || nextX < 0 || nextY >= n || nextY < 0 || answer[nextX][nextY] !== 0) {
dir = (dir + 1) % 4;
nextX = x + move[dir][0];
nextY = y + move[dir][1];
}
x = nextX;
y = nextY;
num ++;
}
return answer;
교과서같은곳에 나온듯한 답이다.
move: x좌표(r,l), y(u,d)을 가산할 배열이다. r,d,l,u 순으로 정해져 있다.
answer: 리턴할 나선형보드
x,y: 좌표
dir: 방향. 초기값은 0으로 move의 인덱스를 담당.
num: 보드에 추가할 숫자
n*n 만큼 num을 증가시켜가면서 반복문을 돌린다.
우선 보드에 num을 추가해준다.
다음 x,y값을 만들때, 현재 좌표에 다음 방향에 맞는 값을 추가해준다.
그런데 만약에 다음 값이 n보다크거나 0보다 작거나, 값이 이미 존재 할 경우
방향을 변경해준다. dir = (dir+1)%4의 의미는 move배열의 현재 방향에서 다음방향으로 이동하겠다는 것
여기서 조금 수정하자면 ,
nextX와 nextY의 값을 재할당 하는 부분이 중복 되므로 if문 이후에 추가하는 것이 좋아 보인다.
x와 y에 각각 nextX와 nextY를 할당해주고 num을 증가시킨다.
반응형
'알고리즘 코테준비' 카테고리의 다른 글
[프로그래머스]주사위게임3 (0) | 2025.02.12 |
---|---|
[프로그래머스] 게임 맵 최단거리 - BFS (0) | 2022.05.19 |
최단경로 찾기 (0) | 2022.01.19 |
다이나믹 프로그래밍 (0) | 2022.01.13 |
Comments