Tree's 개발일기
삼각달팽이 본문
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/68645
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
구현문제였다.
다만, 주의할 건, 아래, 오른쪽, 위를 돌고 난 후
1) 인덱스가 넘치지 않도록 조정해주고,
2) 다음인덱스의 시작점을 위해 조정해주는 작업이 필요했는데
여기서 각 방향별 행열 조건을 잘 봐야한다.
* 예시를 보면서 직접 행령의 인덱스를 보는게 구현하기에 좋다.
나는 위쪽이동 후 x++조건을 하나 놓쳐서 고생했다..
class Solution {
public int[] solution(int n) {
if (n==1) {return new int []{1};}
int [][] mapp = new int[n][n];
int sum =(n*(n+1))/2;
int idx = 1;
int x =0;
int y=0;
int turn =n;
while (idx<=sum) {
//아래
for (int i=0; i<turn; i++) {
mapp[x++][y]=idx++;
}
x--;
turn--;
y++;
// 오른쪽
for (int j=0; j<turn; j++) {
mapp[x][y++]=idx++;
}
y--; //열 안넘치게
turn--;
x--; //다음 차례 준비
y--;
//위쪽
for (int j=0; j<turn; j++) {
mapp[x--][y--]=idx++;
}
x++;
turn--;
x++;
y++;
}
int n_idx = 0;
int[] answer = new int[sum];
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
if (mapp[i][j]!=0) {
answer[n_idx]=mapp[i][j];
n_idx++;
}
}
}
return answer;
}
}
다른 풀이를 보니, i%3의 나머지로 방향을 판단했고, j로 한방향에 몇개씩 넣을건지 정했다.
변수와 절차를 줄여서 간단하게 풀었다..
class Solution {
public int[] solution(int n) {
if (n==1) {return new int []{1};}
int [][] mapp = new int[n][n];
int sum =(n*(n+1))/2;
int idx = 1;
int x = -1;
int y=0;
for(int i=0; i<n; i++) { //방향 여부(3가지 방향)
for(int j=i; j<n; j++) { // turn
if(i%3==0){
x++;
}
else if(i%3==1){
y++;
}
else {
x--;
y--;
}
mapp[x][y]=idx++;
}
}
int n_idx = 0;
int[] answer = new int[sum];
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
if (mapp[i][j]!=0) {
answer[n_idx]=mapp[i][j];
n_idx++;
}
}
}
return answer;
}
}728x90
'문제풀이 > 프로그래머스' 카테고리의 다른 글
| 미로 탈출 (0) | 2023.07.20 |
|---|---|
| [자바]신고 결과 받기 (0) | 2023.07.17 |
| 햄버거 만들기 (0) | 2023.07.13 |
| 숫자 문자열과 영단어 (0) | 2023.07.11 |
| [3차] n진수 게임 (0) | 2023.07.06 |
Comments