반응형
문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/68645
문제 설명
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
제한사항
- n은 1 이상 1,000 이하입니다.
입출력 예
입출력 예 설명
입출력 예 #1
- 문제 예시와 같습니다.
입출력 예 #2
- 문제 예시와 같습니다.
입출력 예 #3
- 문제 예시와 같습니다.
풀이
2021.12.07 - [알고리즘 문제 풀이/백준] - 백준 1913 달팽이 Kotlin (구현)
2021.12.08 - [알고리즘 문제 풀이/백준] - 백준 1952 달팽이2 Kotlin (수학)
2021.12.09 - [알고리즘 문제 풀이/백준] - 백준 1959 달팽이3 Kotlin (수학)
돌아온 달팽이 시리즈~
이번엔 프로그래머스 문제이다.
문제의 규칙을 찾아보면,
달팽이의 이동 방향은 하, 우, 왼쪽 대각이 반복되며,
n이 5라고 할 때, 각 방향마다 5,4,3,2,1만큼 이동 가능하다.
이를 구현하면 끝인 간단한 구현 문제이다.
코드
class Solution {
fun solution(n: Int): IntArray {
val arr = Array(n){IntArray(n)}
//하, 우, 왼대 방향 반복
val dir = arrayOf(arrayOf(1,0),arrayOf(0,1),arrayOf(-1,-1))
//n==5인 경우 각 방향마다 54321만큼 이동
var moveMax = n
var r=0
var c=0
var curDir = 0
var num=1
var moveCnt=0
while(moveMax!=0){
arr[r][c] = num++
moveCnt++
//해당 방향의 최대 이동횟수 도달하면
if(moveCnt==moveMax){
//다음 방향의 최대 이동 횟수 감소
moveMax--
//이동 횟수 초기화
moveCnt=0
//방향 전환
curDir++
}
r+= dir[curDir%3][0]
c+= dir[curDir%3][1]
}
val answer = ArrayList<Int>()
for(i in 0 until n){
for(j in 0 until n){
if(arr[i][j]>0)
answer.add(arr[i][j])
}
}
return answer.toIntArray()
}
}
반응형
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 기둥과 보 설치 Kotlin (구현) (0) | 2021.12.22 |
---|---|
프로그래머스 쿼드압축 후 개수 세기 Kotlin (dfs,분할 정복) (0) | 2021.12.12 |
프로그래머스 금과 은 운반하기 Kotlin (이분탐색) (2) | 2021.12.10 |
프로그래머스 입국심사 c++ (이분 탐색) (0) | 2021.10.15 |
프로그래머스 위클리 9주차_전력망을 둘로 나누기 c++ (dfs) (0) | 2021.10.09 |
댓글