728x90
1. 회전 알고리즘
1.1 90도 회전
2차원 배열을 시계방향으로 90도 회전을 할 때 아래와 같은 일정한 규칙이 존재한다.
- 회전 후의 행 index = 회전 전의 열 index
- 회전 후의 열 index = 기존 행/열의 마지막 index - 회전 전의 행 index - 1
코드로 나타내면 아래와 같다.
def rotate_90(matrix):
N = len(matrix) # 행 길이 계산
M = len(matrix[0]) # 열 길이 계산
result = [[0] * N for _ in range(M)] # 회전된 결과를 담을 새 리스트
# 변환 수행
for row in range(N):
for col in range(M):
result[col][N-row-1] = matrix[row][col]
return result
1.2 180도 회전
90도 회전과 마찬가지로 180도 회전은 아래와 같은 일정한 규칙이 존재한다.
- 회전 후의 행 index = 기존 행/열의 마지막 index - 기존 행 index
- 회전 후의 열 index = 기존 행/열의 마지막 Index - 기존 열 index
코드로 나타내면 아래와 같다.
def rotate_180(matrix):
N = len(matrix) # 행 길이 계산
M = len(matrix[0]) # 열 길이 계산
result = [[0] * N for _ in range(M)] # 회전된 결과를 담을 새 리스트
# 변환 수행
for row in range(N):
for col in range(M):
result[N-row-1][M-col-1] = matrix[row][col]
return result
1.3 270도 회전
동일하게 아래와 같은 규칙을 찾을 수 있다.
- 회전 후의 행 index = 기존 행/열의 마지막 index - 회전 전 열 Index - 1
- 회전 후의 열 index = 기존 행 index
코드로 나타내면 아래와 같다.
def rotate_270(matrix):
N = len(matrix) # 행 길이 계산
M = len(matrix[0]) # 열 길이 계산
result = [[0] * N for _ in range(M)] # 회전된 결과를 담을 새 리스트
# 변환 수행
for row in range(N):
for col in range(M):
result[N-col-1][row] = matrix[row][col]
return result
2.튜플 자료형
2.1 튜플의 특징
- 불변성 : 한 번 생성된 튜플은 그 요소를 변경할 수 없다. 즉 요소의 추가, 삭제, 수정이 불가능하다.
-> 리스트보다 더 안전하게 데이터를 보호할 수 있다.
-> 반면 데이터를 수정할 필요가 있으면 리스트를 활용해야한다. - 순서가 있음 : 튜플은 요소들이 순서대로 저장되며, 인덱스를 활용하여 특정 요소에 접근 가능하다
-> 리스트와 마찬가지로 인덱싱, 슬라이싱이 가능하다. - 중복 허용 : 동일한 값을 여러번 포함할 수 있다.
- 다양한 데이터 타입 저장 가능 : 정수, 문자열, 리스트, 다른 튜플 등 다양한 데이터 타입을 요소로 가질 수 있다.
2.2 튜플의 장점
- 성능 : 불면성 때문에 리스트보다 메모리 사용이 효율적이고 읽기 속도가 빠르다.
- 데이터 보호 : 데이터의 무결성을 보장한다.
- 해시 가능성 : 불변성 덕분에 hashable하고, 딕셔너리의 key로 활용될 수 있다.
* Numeric, Immutable container는 hashable이다.
* 딕셔너리의 키는 불변성이어야 한다.
2.3 튜플을 사용하는 경우
- 데이터가 변경되지 않아야 하는 경우
- 함수에서 여러 값을 반환할 때
def get_coordinates():
x = 10
y = 20
return (x, y) # 튜플로 반환
# 출력예제1 : 하나의 변수에 저장하여 출력
coordinates = get_coordinates()
print(coordinates) # 출력: (10, 20)
# 출력예제2 : 언패킹을 통해 각각의 변수에 저장
x, y = get_coordinates() # 튜플 언패킹
print(x, y) # 출력: 10 20
- 딕셔너리의 키로 사용할 때
- 불변성을 요구하는 컨텍스트에서 데이터를 전달할 때
2.4 기본적인 사용방법
2.4.1 튜플 생성
tuple1 = ()
tuple2 = (1,) # 하나의 요소를 가진 튜플 생성, 반드시 뒤에 쉼표를 붙여야 함.
tuple3 = (1,2,3) # 소괄호를 사용한 생성
tuple4 = 1, 2, 3 # 괄호를 생략한 생성
tuple5 = tuple([1,2,3]) # 튜플 함수를 사용한 생성
2.4.2 튜플 사용
2.4.2.1 인덱싱
t = (1, 2, 3, 4)
print(t[0])
# 출력: 1
2.4.2.2 슬라이싱
t = (1, 2, 3, 4)
print(t[1:3])
# 출력: (2, 3)
2.4.2.3 튜플 연결
t1 = (1, 2)
t2 = (3, 4)
print(t1 + t2)
# 출력: (1, 2, 3, 4)
2.4.2.4 반복 출력
t = (1, 2)
print(t * 3)
# 출력: (1, 2, 1, 2, 1, 2)
2.4.5 길이
t = (1, 2, 3)
print(len(t))
# 출력: 3
2.5 튜플과 관련된 함수
2.5.1 count()
튜플 내의 요소의 개수를 반환한다.
t = (1, 2, 2, 3)
print(t.count(2))
# 출력: 2
2.5.2 index()
튜플 내에서 특정 요소의 첫 번째 위치를 반환한다.
t = (1, 2, 3)
print(t.index(2))
# 출력: 1
728x90
'회고' 카테고리의 다른 글
[24.06.01] 99클럽 코테 스터디 13일차 TIL - OrderedDict (0) | 2024.06.01 |
---|---|
[24.05.31] 99클럽 코테 스터디 12일차 TIL - DefaultDict (0) | 2024.05.31 |
[24.05.29] 99클럽 코테 스터디 10일차 TIL - 완전 탐색 알고리즘 (0) | 2024.05.29 |
[24.05.28] 99클럽 코테 스터디 9일차 TIL - 해시 알고리즘, Set 자료형 (0) | 2024.05.28 |
[24.05.27] 99클럽 코테 스터디 8일차 TIL - Iterable, Iterator (0) | 2024.05.28 |