프로그래머스 - 삼각달팽이(Level 2)
문제 설명
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
제한사항
-
n은 1 이상 1,000 이하입니다.
입출력 예
nresult
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] |
입출력 예 설명
입출력 예 #1
-
문제 예시와 같습니다.
입출력 예 #2
-
문제 예시와 같습니다.
입출력 예 #3
-
문제 예시와 같습니다.
문제풀이
어려워보일 수 있지만 그냥 직관적으로 달팽이 모양으로 배열을 그려가면 해결 할 수 있는 문제이다.
가장 먼저 달팽이를 그려줄 2차원 배열을 생성한 다음 0으로 초기화를 해주고 0인 칸들만 순서대로 채워나가면 될 것이다.
def solution(n):
answer = []
map = [[0 for col in range(n)] for row in range(n)] // 값을 저장할 배열 생성
map[0][0] = 1
num_sum = 0
for x in range(1, n + 1):
num_sum = num_sum + x
x_cursor = 0
y_cursor = 0
num = 2
while True: // 바깥쪽 삼각형부터 그려나감
while True: // 왼쪽변에 대한 반복문
if y_cursor + 1 >= n or map[y_cursor + 1][x_cursor] != 0:
break;
map[y_cursor + 1][x_cursor] = num
y_cursor = y_cursor + 1
num = num + 1
if num_sum + 1 == num:
break
if num_sum + 1 == num:
break
while True: // 아랫변에 대한 반복문
if x_cursor + 1 >= n or map[y_cursor][x_cursor + 1] != 0:
break;
map[y_cursor][x_cursor + 1] = num
x_cursor = x_cursor + 1
num = num + 1
if num_sum + 1 == num:
break
if num_sum + 1 == num:
break
while True: // 오른쪽 변에 대한 반복문
if map[y_cursor -1][x_cursor -1] != 0:
break;
map[y_cursor -1][x_cursor -1] = num
num = num + 1
x_cursor = x_cursor - 1
y_cursor = y_cursor - 1
if num_sum + 1 == num:
break
if num_sum + 1 == num:
break
for x in range(0, n): // 저장한 값에서 0이 아닌 값들을 answer 에 넘겨줌
for y in range(0, n):
if map[x][y] == 0:
break
answer.append(map[x][y])
return answer
이중 반복문을 사용하여 직각삼각형 모양으로 삼각형을 그렸는데 n = 6 으로 예시를 들면
이런식으로 두개의 삼각형이 나오게 되는데 이는 n이 증가하더라도 비슷한 패턴으로 나오게 될 것이다.
문제에 대한 생각
문제를 해결하는데는 어렵지 않았지만 조건문을 섬세하게 설정하지 않으면 버그가 발생하기 쉬운 문제라고 생각한다. 처음 작성할 때 각 조건에 대해 정확하게 생각하고 작성하지 않으면 문제를 푸는데 오래 걸릴 것이다...
나도 실수해서 좀 오래걸렸다 ㅠㅠ
Written by Sheart
'Study☆ > Computer Science' 카테고리의 다른 글
프로그래머스 - 다리를 지나는 트럭(Level 2) (0) | 2020.11.09 |
---|---|
정보처리기사 실기 2020 1~3회 정리 (0) | 2020.11.07 |
프로그래머스 - 짝지어 제거하기(Level 2) (0) | 2020.11.07 |
프로그래머스 - 기능개발(Level 2) (0) | 2020.11.05 |
프로그래머스 - 스킬트리(Level 2) (0) | 2020.10.28 |