티스토리 뷰
728x90
최대값 구하는 개념과 이중 while loop를 돌며 값을 채워주는 개념까지는 잘 적용하였으나 내부 while loop를 세부적으로 구현할때 문제가 생겨 다른 사람의 풀이를 참고하였다.
해당 풀이에서의 핵심은 이동을 하고 값의 유효성을 확인하는 것이 아니라 이동할 좌표가 이미 값이 채워졌는지 확인(arr[y + 1][x] or arr[y][x + 1]과 같이) 하고 0이 아닌 값으로 이미 채워져있다면 이미 해당 좌표를 들렀다는 의미이므로
해당 좌표로 이동하지 않고 내부 while loop를 break시키는게 핵심이었다.
헷갈리는 while loop + 헷갈리는 array index 문제의 조합이라 매우 헷갈렸다.
while loop와 array index에 대해 좀 더 심도있게 공부해야 할 필요를 느낀다.
class Solution {
public int[] solution(int n) {
var arr = new int[n][n];
var limit = (n * (n + 1)) / 2;
var answer = new int[limit];
var number = 1;
var y = 0; var x = 0;
arr[0][0] = 1;
while (true) {
if (number == limit) break;
while (y + 1 < n) {
if (arr[y + 1][x] != 0) break;
arr[++y][x] = ++number;
}
while (x + 1 < n) {
if (arr[y][x + 1] != 0) break;
arr[y][++x] = ++number;
}
while (y - 1 > 0 && x - 1 > 0) {
if (arr[y - 1][x - 1] != 0) break;
arr[--y][--x] = ++number;
}
}
var index = 0;
for (var i = 0; i < n; i++) {
for (var j = 0; j <= i; j++) {
answer[index++] = arr[i][j];
}
}
return answer;
}
}
'CodingTest' 카테고리의 다른 글
199. Binary Tree Right Side View (Java, recursion, Leetcode) (0) | 2022.08.29 |
---|---|
[1차] 프렌즈4블록 (Java, 2D Array, 프로그래머스(카카오)) (0) | 2022.08.20 |
가장 큰 수 (Java, Comparator, 프로그래머스) (0) | 2022.08.18 |
메뉴 리뉴얼 (Java, DFS, 프로그래머스) (0) | 2022.08.16 |
다리를 지나는 트럭 (Java, 큐, 프로그래머스) (0) | 2022.08.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 루나빔
- lunarvim
- 도커
- IDE
- RequestParam
- RequestPart
- neovim
- vim
- Dap
- 레디스
- 배포
- 아키텍처
- RequestBody
- ModelAttribute
- JavaScript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함