프로그래머스
[프로그래머스/Level2] 삼각 달팽이 (Python)
굴잉
2024. 7. 1. 14:45
728x90
문제 설명
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
제한사항
- n은 1 이상 1,000 이하입니다.
입출력 예
n | result |
4 | [1,2,9,3,10,8,4,5,6,7] |
5 | [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] |
6 | [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11] |
문제 풀이
💡 접근 방법
- `answer` 0으로 채운 밑변의 길이와 높이가 n인 삼각 배열을 생성
- 배열 값을 채울 수 반복
- `next_r`, `next_c`를 구해 준다음
- 조건에 만족하지 않으면 dir = (dir + 1) % 3
- 조건에 만족하면 `c_r`, `c_c`에 대입
- `next_r`, `next_c`를 구해 준다음
✏️ 문제 풀이
def solution(n):
answer = [[0] * i for i in range(1, n + 1)]
r = [1, 0, -1]
c = [0, 1, -1]
dir = 0
c_r = 0
c_c = 0
num = sum([n for n in range(1, n + 1)])
for i in range(1, num + 1):
answer[c_r][c_c] = i
next_r = c_r + r[dir]
next_c = c_c + c[dir]
if next_r >= n or next_c >= len(answer[next_r]) or answer[next_r][next_c] != 0:
dir = (dir + 1) % 3
c_r += r[dir]
c_c += c[dir]
else:
c_r = next_r
c_c = next_c
return sum(answer, [])
🔗 문제 출처
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
728x90