문제
https://school.programmers.co.kr/learn/courses/30/lessons/68645#
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
입출력

해설
n이 주어졌을 때 삼각형을 반시계 방향으로 값을 채운 뒤, 1행부터 한 줄로 값을 리턴하여라.
이런 유형의 달팽이 구현 문제들은 배열을 선언하고 값을 채울 생각을 하는 것이 좋다.
첫 번째로 n * n의 형태로 배열을 생성한다.
두 번째로 값을 넣는데, 반시계 방향으로 움직일 수 있도록 만들어 놓는다.
세 번째 종료 조건을 생각한다.
위와 같은 생각으로 구현을 하는데 동작을 시뮬레이션 돌려보면서 필요한 변수들을 선언해본다.
1. 행과 열 (i, j)
2. 넣을 숫자 number
그 후 어떤 방식으로 움직여야 되는지 생각해본다.
=> 반시계로 움직이고 경계면에 닿거나 숫자가 들어있는 곳으로 가게되면 방향을 꺾어야 한다.
마지막으로 종료되는 조건을 생각해본다.
=> 방향을 3번을 돌린 후에도 전진을 하지 않았더라면 종료한다.
정답코드
더보기
'''
'25. 11. 30.(일)
1. n이 주어진다.
2. n개의 삼각형을 반시계 방향으로 값을 채우기
'''
def solution(n):
answer = [[0] * (n + 1)for _ in range(n + 1)]
i = j = 0
number = 1
dx = [1, 0, -1]
dy = [0, 1, -1]
direc = 0
while 1:
answer[i][j] = number
ni, nj = i + dx[direc], j + dy[direc]
#경게면 체크를 최대 3번
count = 0
while (not (ni >= 0 and nj >= 0 and ni < n and nj < n) or answer[ni][nj])and count < 3:
direc = (direc + 1) % 3
ni, nj = i + dx[direc], j + dy[direc]
#없으면 해당 부분으로 값을 넣으면 돼서
count += 1
if count == 3:break
i, j = ni, nj
number += 1
ret = []
for i in range(n):
for j in range(i + 1):
ret.append(answer[i][j])
return ret
깃허브 : https://buly.kr/6Bxvvny
'코딩테스트 > programmers' 카테고리의 다른 글
| 프로그래머스 / 수학, 정수론 / 숫자 카드 나누기 (0) | 2025.12.11 |
|---|---|
| 프로그래머스 / BFS / 미로 탈출 (0) | 2025.12.09 |
| 프로그래머스 / 큐 / 다리를 지나는 트럭 (0) | 2025.11.27 |
| 프로그래머스 / 분할정복 / 쿼드압축 후 개수 세기 (0) | 2025.11.13 |
| 프로그래머스 / 슬라이딩 윈도우 / 두 큐 합 같게 만들기 (0) | 2025.11.12 |