KATA#91

codataffee·2024년 7월 14일
0

CODEKATA

목록 보기
91/114
post-thumbnail

WHAT IS KATA?

KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.

이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.


- PYTHON


✔️ 문제 #1: 삼각 달팽이

✔️ 제출 코드

✔️ 코드 분석

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  # 최종 결과 반환


✔️ CHECK POINT

  • 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와 append 비교
     < 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에 추가

profile
커피 좋아하는 데이터 꿈나무

0개의 댓글

관련 채용 정보