KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.
이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.
✔️ 제출 코드
✔️ 코드 분석
def solution(n):
# 삼각형을 채울 2차원 리스트 생성
# n개의 행을 가진 삼각형 생성, 각 행 i는 i + 1개의 0을 포함
triangle = [[0] * (i + 1) for i in range(n)]
num = 1 # 삼각형에 채울 숫자 1 부여
x, y = -1, 0 # 현재 위치를 나타낼 좌표 초기화
for i in range(n):
# 각 단계에서 n-i개의 숫자 채우기
for j in range(i, n):
if i % 3 == 0: # 아래로 이동
x += 1 # x 좌표를 증가시켜 아래로 이동
elif i % 3 == 1: # 오른쪽으로 이동
y += 1 # y 좌표를 증가시켜 오른쪽으로 이동
elif i % 3 == 2: # 대각선 위로 이동
x -= 1 # x 좌표를 감소시켜 위로 이동
y -= 1 # y 좌표를 감소시켜 왼쪽으로 이동
triangle[x][y] = num # 현재 좌표에 숫자 채우기
num += 1 # 다음 숫자 준비
answer = [] # 결과를 담을 리스트 생성
for row in triangle:
answer.extend(row) # 각 행을 결과 리스트에 추가
return answer # 최종 결과 반환
PYTHON
.extend()
메서드 ?
파이썬의 리스트(list) 자료형에서 제공하는 메서드로,
다른 리스트의 모든 요소를 현재 리스트에 추가하는 기능
예시
# 2개의 리스트가 있을 때
list1 = [1, 2, 3]
list2 = [4, 5, 6]
# list1에 list2의 요소들을 추가
list1.extend(list2)
# 결과
print(list1) # [1, 2, 3, 4, 5, 6]
< extend >
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list1.extend(list2)
print(list1) # [1, 2, 3, 4, 5, 6]
< append >
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list1.append(list2)
print(list1) # [1, 2, 3, [4, 5, 6]]
# 높이가 n인 삼각형을 만들기 위해 각 행을 0으로 초기화
triangle = [[0] * (i + 1) for i in range(n)]
예) n=4
triangle = [
[0],
[0, 0],
[0, 0, 0],
[0, 0, 0, 0]
]
num = 1
x, y = -1, 0
> num은 삼각형에 채워질 첫 번째 숫자
> x와 y는 삼각형 내에서 현재 위치를 나타내는 좌표
> 초기값으로 x를 -1로 설정한 이유:
첫 번째 이동이 아래로 진행되기 때문
for i in range(n):
for j in range(i, n):
if i % 3 == 0:
x += 1
elif i % 3 == 1:
y += 1
elif i % 3 == 2:
x -= 1
y -= 1
triangle[x][y] = num
num += 1
> i는 현재 채우기 단계 (반시계 방향으로 진행)를 나타내며,
각 단계마다 방향이 바뀜
> j는 현재 채워야 하는 숫자의 개수,
각 단계마다 n-i개의 숫자 채우기
> 방향은 i % 3 값에 따라 결정 :
i % 3 == 0: 아래로 이동 (x 증가)
i % 3 == 1: 오른쪽으로 이동 (y 증가)
i % 3 == 2: 대각선 위로 이동 (x 감소, y 감소)
> 각 좌표에 num을 채우고 num을 증가시켜 다음 숫자 준비
answer = []
for row in triangle:
answer.extend(row)
> 삼각형의 각 행을 순회하며 각 행의 요소들을 answer에 추가