문제 출처 - Programmers
문제는 여기
[풀이]
1. 값을 입력시켜줄 2차원 배열을 생성한다.
2. 숫자가 적히는 방법은 총 3가지이다.
2-1. 아래 방향
2-2. 오른쪽 방향
2-3. 위 방향
3. 2. 에서 숫자가 적히기 위한 방법은 아래와 같다.
3-1. 행 증가
3-2. 열 증가
3-3. 행, 열 감소
4. 방향을 바꾸는 횟수는 n과 일치하기 때문에 n만큼 반복을 한다.
5. 조건에 맞춰 아래, 왼쪽, 위 3가지 방향으로 바꿔주고, 값을 올려가며 숫자를 넣어준다.
6. 입력된 숫자를 정답에 넣고 출력한다.
[접근]
1. 방향이 한번 바뀔 때마다 칸의 수가 1개씩 줄어드는 규칙을 알게 되었다.
2. 마지막에 나오는 숫자는 (n * (n + 1)) / 2라는 규칙을 알게 되었다.
[코드]
class Solution {
public int[] solution(int n) {
int num = 1;
int a = -1;
int b = 0;
int[][] map = new int[n][n];
// n의 갯수 == 꺾는 횟수
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
// 아래
if (i % 3 == 0) {
a++;
}
// 왼쪽
else if (i % 3 == 1) {
b++;
}
// 위
else if (i % 3 == 2) {
a--;
b--;
}
map[a][b] = num;
num += 1;
}
}
int k = 0;
// n * (n + 1) / 2가 제일 마지막 숫자
int[] answer = new int[(n * (n + 1)) / 2];
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
// 0이면 삼각형의 모양을 벗어난 곳
if(map[i][j] == 0)
break;
answer[k++] = map[i][j];
}
}
return answer;
}
}
'문제 풀이 > Programmers' 카테고리의 다른 글
[프로그래머스] 이진 변환 반복하기 (JAVA) (0) | 2022.03.15 |
---|---|
[프로그래머스] 두 개 뽑아서 더하기 (JAVA) (0) | 2022.03.14 |
[프로그래머스] 신규 아이디 추천 (JAVA) (0) | 2022.03.11 |
[프로그래머스] 문자열 압축 (JAVA) (0) | 2022.03.10 |
[프로그래머스] 최댓값과 최솟값 (JAVA) (0) | 2022.03.09 |