본문 바로가기

Algorithm17

2차원 배열 탐색 목적에 따라 여러가지 방법으로 2차원 배열을 탐색할 수 있다. # 2차원 배열 arrs = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # 1. 행 & 열 우선 탐색 # 행우선 for i in range(len(arrs)): for j in range(len(arrs[0])): print(arrs[i][j], end=' ') print() # 열우선 for j in range(len(arrs[0])): for i in range(len(arrs)): print(arrs[i][j], end=' ') print() # 2. 지그재그 순회 # 지그재그 순회 for i in range(len(arrs)): for j in range(len(arrs[0])): print(arrs[i][j + (i.. 2021. 8. 22.
정렬 알고리즘 정렬을 구현하는 알고리즘은 여러가지가 있다. 이번 글에서는 그 중 3가지의 방법을 정리하고자 한다. 다음과 같은 배열이 있다고 가정하자. arr = [4, 2, 9, 3, 10, 5, 2, 7, 8, 6, 10] # 1 - Bubble sort - 리스트 내의 원소들을 하나하나 비교해가며, 큰 값을 오른쪽으로 이동시키는 방식이다. # Bubble sort for i in range(len(arr)-1, 0, -1): for j in range(i): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] print(arr) # 2 - Counting sort - 리스트의 각 원소들이 몇 번 등장하는지 count하여 정렬을 하는 방식이다. - 시간복잡도가 줄.. 2021. 8. 21.
회문 판단 회문이란, 바로 읽으나 거꾸로 읽으나 동일한 문자열을 의미한다. 특정 문자열이 회문임을 판단하기 위해선, 여러가지 방법을 사용할 수 있다. 1. 재귀함수 이용 # 회문여부 확인 함수 - 입력받은 문자열이 회문이면 True, 아니면 False 반환 def is_palindrome(word): if len(word) < 2: # 종료조건 return True if word[0] != word[-1]: return False # 만약 양 끝의 글자가 같지 않다면 False 리턴 return is_palindrome(word[1:-1]) # 재귀함수 호출 - 탐색범위 좁히기 2. 슬라이싱 이용 def is_palindrome(word): if word == word[::-1] # 슬라이싱을 활용해 원본과 원본을.. 2021. 8. 17.
2차원 배열 회전 다음과 같은 2차원 배열이 있다고 할 때, 배열을 시계 방향으로 90도 회전하는 방법을 알아보자. nums = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 다음은 2차원 배열을 90도 회전하기 위한 함수이다. # 2차원 배열을 인자로 받아 90도 회전한 결과를 리턴하는 함수 def rotate(arrs): n = len(arrs) arrs_90 = [[0] * n for _ in range(n)] for i in range(n): for j in range(n): arrs_90[i][j] = arrs[n-1-j][i] return arrs_90 180도는 다음과 같다. 일정 규칙을 찾아, 인덱스를 적절하게 변경해주는 것이 중요하다. def rotate(arrs): n = len(arrs).. 2021. 8. 17.