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
- 서로소
- jquery dom 계층 선택자
- 조합 재귀
- parseInt()
- 자바
- jquery 이벤트 처리
- 자바스크립트 이벤트중지
- jquery 속성선택자
- 자바입출력
- 재귀
- Interface
- 자바 순열 코드
- java lambda
- Java
- 자바스크립트 이벤트처리
- 후위표기
- 상속
- 알고리즘 그래프
- 자바 재귀 조합
- 순열 재귀
- char to str
- java 내부 클래스
- inner class
- 자바 조합 재귀
- jquery 필터선택자
- 순열코드
- 재귀함수
- 알고리즘
- java Collections.sort()
- str to char array
Archives
- Today
- Total
유블로그
[프로그래머스] 삼각달팽이 본문
프로그래머스 level2 삼각달팽이
소요시간 : 18분
방향이 3가지가 있어서
1 - i만 증가
2 - j만 증가
3 - i 감소 j 감소
이 3가지 방향을 차례대로 반복했다.
i 나 j 인덱스가 벗어나거나 이미 값이 들어간 곳에 도착하면
방향을 바꿔주면 된다.
1 + 2 + ... + n = n(n+1)/2 개만큼 돌면 break 한다.
풀고나서 다른 사람 풀이를 보니 i % 3 == 0 이면 i++, i % 3 == 1이면 j++, i % 3 == 2 이면 i--, j-- 이렇게
for문 두개 안에서 간단하게 풀이를 했는데 진짜 괜찮은 방법인 것 같다.
class Solution {
public int[] solution(int n) {
int[][] arr = new int[n][];
for (int i = 0; i < n; i++) {
arr[i] = new int[i+1];
}
int[][] dir = { {1, 0}, {0, 1}, {-1, -1}};
int num = 1, i = 0, j = 0, d = 0, count = 0;
while(true) {
if(count == n*(n+1)/2) break;
if(i >= n || i < 0 || arr[i].length <= j || arr[i][j] != 0) {
i -= dir[d][0];
j -= dir[d][1];
d++;
d %= 3;
i += dir[d][0];
j += dir[d][1];
}
arr[i][j] = num++;
i += dir[d][0];
j += dir[d][1];
count++;
}
int[] answer = new int[num-1];
i = 0;
for (int k = 0; k < arr.length; k++) {
for (int k2 = 0; k2 < arr[k].length; k2++) {
answer[i++] = arr[k][k2];
}
}
return answer;
}
}
'알고리즘' 카테고리의 다른 글
[프로그래머스] 문자열 압축 (0) | 2021.01.18 |
---|---|
[프로그래머스] 카카오 프렌즈 컬러링북 (0) | 2021.01.15 |
[프로그래머스] 크레인 인형뽑기 게임 (0) | 2021.01.11 |
[프로그래머스] 스킬트리 (0) | 2021.01.10 |
[프로그래머스] 124의 나라의 숫자 (1) | 2021.01.10 |