티스토리 뷰
프로그래머스
사이트로 이동하기 : https://school.programmers.co.kr/learn/challenges?order=acceptance_desc&page=1
정수를 나선형으로 배치하기
LV0 이지만 이 한문제 풀기 위해서 계속 안풀려서 많은 고민을 하게 되었다.
문제 설명
제한사항
예시
문제 Solution 코드
class Solution {
public int[][] solution(int n) {
int[][] answer = new int[n][n];
int value = 1;
int row = 0, col = 0;
int lastRow = n - 1, lastCol = n - 1;
while (value <= n * n) {
for (int i = col; i <= lastCol; i++) // right
answer[row][i] = value++;
for (int i = row + 1; i <= lastRow; i++) // down
answer[i][lastCol] = value++;
for (int i = lastCol - 1; i >= col; i--) // left
answer[lastRow][i] = value++;
for (int i = lastRow - 1; i > row; i--) // up
answer[i][col] = value++;
row++;
col++;
lastRow--;
lastCol--;
}
return answer;
}
}
이 문제를 풀 때는 value값을 꾸준히 증가 시키기 위해 while로 전체 크기의 반복문을 걸어주었다.
그 다음 right로 이동하는 반복문, down 이동하는 반복문, left로 이동하는 반복문, up 이동하는 반복문을 걸어 주었다.
이 반복문을 끝나게 되면 행, 열을 한 칸 이동해서 그 작업을 반복하게 되는 것입니다.
뭔가 하노이 탑의 원판을 생각하면 됩니다. 큰 겉에서 부터 안쪽으로 반복문 작업을 한다고 생각하면 뭔가 이해하기 빠를 것입니다.
프로그래머스 문제 이해를 돕기 위한 그림 설명
제일 먼저 겉 쪽으로 돌면서 반복문을 돌린다.
안쪽으로 반복문을 돌리면서 채워 나간다.
결론
어떻게든 구현만 하면 된건가...? 오랫동안 고민하고 어쩌다 보니 구현은 한 것 같은데
채점을 하였을 때 걸리는 시간이나, 메모리들이 많이 안 잡아 먹어서 괜찮은 코드인건가 생각하게 된다..
다른 사람이 푼 것을 보니 코딩 테스트에는 엄청 난 사람들이 많구나 라고 생각하게 된다.
감사합니다.
'코딩 테스트 > 🦅프로그래머스' 카테고리의 다른 글
[프로그래머스] 모의고사 - JAVA (0) | 2024.02.07 |
---|---|
[프로그래머스] 비밀지도 - JAVA (0) | 2023.12.23 |
[프로그래머스] 숫자 문자열과 영단어 - JAVA (0) | 2023.11.29 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- AJAX
- 자바스크립트
- spring
- 프론트
- Front
- aws
- 네트워크
- JavaScript
- 데이터 베이스
- 코딩테스트
- Mac
- Fetch
- Spring Security
- 개발자
- 템플릿
- 개발
- 디자인패턴
- 개발환경
- java
- 프로세스
- 비동기
- 개발블로그
- Cors
- DBeaver
- git
- 오라클
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함