다희의 코딩 성장일기
[프로그래머스] level2. 삼각 달팽이 (자바 JAVA) 본문
[ 문제 ] [프로그래머스] level2. 삼각 달팽이 (자바 JAVA)
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/68645
# 접근 방법 및 풀이
- 문제 그대로 구현해서 풀면되는데 난 이차원 map[][]을 구현해서 풀었다.
- map을 주어진 n 사이즈 크기만큼 map [n][n] 로 만든다.
- 문제 예시대로 n = 4 일 경우, map에 표시하면 다음과 같은 삼각형이 만들어진다.
-
1 2 9 3 10 8 4 5 6 7 - 문제에선 그림이 피라미드 형태지만 나는 map[][]안에서 구현하므로 저 모양으로 생각하고 만들었다.
- 숫자 1부터 쭉 순서대로 map에 표시하면 된다. 이때 표시할 순서는 ↓, →, ↖ 순서대로 진행되고 반복된다.
-
1↓ 2↓ 9↖ 3↓ 10↓ 8↖ 4↓ 5→ 6→ 7→ - 여기서 화살표의 갯수가 4 -> 3 -> 2 -> 1개로 n부터 한 개씩 줄어드는 것을 볼 수 있다.
- 따라서 while문으로 n != 0이 아닐 때 까지 반복해주고 n을 하나씩 줄인다.
- while문 안에 for문으로 for(int i = 0; i < n; i++) 줄어드는 n번만큼 표시를 해주는데 방향에 따라 분기를 나누어주었다.
- 방향 d는 ↓(d = 0), → (d = 1), ↖ (d = 2)
- 자세한건 코드 참조! 삼각형을 어떤 순서대로 살펴볼지만 알면 쉬운 문제
# 주의할 점
- r이 왜 -1부터 시작하는지 생각해볼 것!
JAVA 코드
import java.util.*;
class Solution {
public List<Integer> solution(int n) {
int map[][] = new int[n][n];
int r = -1, c = 0;
int d = 0;
int num = 1;
while(n!=0){
for(int i = 0; i < n; i++){
if(d == 0){
map[r+1][c] = num;
r++;
}
if(d == 1){
map[r][c+1] = num;
c++;
}
if(d == 2){
map[r-1][c-1] = num;
r--;
c--;
}
num++;
}
n--;
d = (d+1)%3;
}
List<Integer> list = new ArrayList<>();
for(int i = 0; i < map.length; i++){
for(int j = 0; j < map.length; j++){
if(map[i][j] == 0)
break;
list.add(map[i][j]);
}
}
return list;
}
}
REVIEW
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] level2. 위클리 챌린지 5주차 (자바 JAVA) (0) | 2021.08.31 |
---|---|
[프로그래머스] level2. 순위 검색 (자바 JAVA) (0) | 2021.08.30 |
[프로그래머스] level2. 행렬 테두리 회전하기 (자바 JAVA) (0) | 2021.08.29 |
[프로그래머스] level2. 짝지어 제거하기 (자바 JAVA) (0) | 2021.08.28 |
[프로그래머스] level2. 피보나치 수 (자바 JAVA) (0) | 2021.08.27 |
Comments