본문 바로가기
300x250

코딩테스트 파이썬9

[코딩테스트] 이진 탐색 알고리즘 순차 탐색 : 리스트 안에 있는 특정 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 확인하는 방법 이진 탐색 : 정렬되어 있는 리스트에서, 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법으로 시작점/끝점/중간점을 이용해서 탐색 범위를 명시해주어야 한다. 이미 정렬된 10개의 데이터 중에서 값이 4인 원소를 찾는다면, 1. array = [0,2,4,6,8,10,12,14,16,18] 시작점:array[0]=0, 끝점:array[9]=18, 중간점:array[4]=8(소수점 이하 제거) 찾고자 하는 4가 중간점인 8보다 작다. 그러므로 중간점을 포함하여 오른쪽 부분은 필요가 없으므로 날려보자. 2. array = [0,2,4,6] 시작점:array[0]=0, 끝점:array[3]=6, 중간점:array.. 2023. 1. 25.
[코딩테스트] 정렬 알고리즘 비교 및 기초 예제 앞의 포스팅에서 네 가지의 정렬 알고리즘을 다뤘다. 상세한 내용이 필요하다면 먼저 아래 두 포스팅을 보고 오는 것을 추천한다. 2023.01.24 - [Data Science] - [코딩테스트] 정렬 알고리즘(1) 선택 정렬과 삽입 정렬 2023.01.24 - [Data Science] - [코딩테스트] 정렬 알고리즘(2) 퀵 정렬 계수 정렬 1. 선택 정렬 평균 시간 복잡도 O(N²) 공간 복잡도 O(N) 매우 간단하고 구현이 쉽다. 2. 삽입 정렬 평균 시간 복잡도 O(N²) 공간 복잡도 O(N) 일반적으로 선택정렬보다 좀 더 빠르다. 데이터가 거의 정렬되어 있다면 O(N)으로 가장 빠르다. 3. 퀵 정렬 평균 시간 복잡도 O(NlogN) 공간 복잡도 O(N) 대부분 가장 적합하며, 충분히 빠르다. .. 2023. 1. 25.
[코딩테스트] 정렬 알고리즘(2) 퀵 정렬 계수 정렬 퀵 정렬 기준 데이터를 설정하고 그 기준보다 큰 데이터와 작은 데이터의 위치를 바꾼다. 일반적인 상황에서 가장 많이 사용되는 정렬 알고리즘이며, 병합 정렬과 더불어 대부분 프로그래밍 언어 정렬 라이브러리의 근간이 된다. 가장 기본적인 퀵 정렬은 첫 번째 데이터를 기준 데이터(Pivot)로 설정한다. 1. array = [5,7,9,0,3,1,6,2,4,8] 이라고 할 때, 피벗의 값은 5로 선택한다. 2. 왼쪽에서부터 5보다 큰 데이터인 7이 선택되고, 오른쪽에서부터 5보다 작은 데이터인 4가 선택된다. 이 두 데이터의 위치를 서로 변경해준다. 3. array=[5,4,9,0,3,1,6,2,7,8]인 상태에서, 왼쪽에서부터 5보다 큰 데이터인 9가 선택되고, 오른쪽에서부터 5보다 작은 데이터인 2가 선택.. 2023. 1. 24.
[코딩테스트] 정렬 알고리즘(1) 선택 정렬과 삽입 정렬 정렬(sorting) : 데이터를 특정 기준에 따라 순서대로 나열하는 것. 문제 상황에 따라 적절한 정렬 알고리즘을 공식처럼 쓰자. 사람이 보기에는 바로 정렬 결과를 알아볼 수 있겠지만, 컴퓨터는 구체적으로 어떠한 방식으로 정렬을 수행할지 코드를 짜줘야 한다. 선택 정렬 처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것을 반복한다. 0~9까지 10개의 카드가 랜덤하게 놓여있다고 가정해보자. 1. 처리되지 않은 데이터 중 가장 작은 0을 선택해, 첫 번째 위치의 숫자와 서로 위치를 바꾼다. 2. 남은 9개의 카드 중에서 가장 작은 숫자인 1을 선택해, 두 번째 위치의 숫자와 서로 위치를 바꾼다. 3. 정렬되지 않은 데이터가 1개 남았을 때에는 앞쪽으로 보내봤자 자기 .. 2023. 1. 24.
[코딩테스트] DFS BFS 문제 풀이 실습 문제 1. 음료수 얼려 먹기 N x M 크기의 얼음 틀에서 구멍은 0, 칸막이는 1로 표시된다. 구멍이 뚫려 있는 부분(0)끼리 상하좌우로 붙어있는 경우, 서로 연결되어 있는 것으로 간주한다. 얼음 틀의 모양이 주어졌을 때, 생성되는 총 아이스크림의 개수를 구하는 프로그램을 작성하라. EX) 아래 예시에서는 아이스크림이 3개 생성된다. 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 입력 조건 - 첫 번째 줄에 얼음틀의 세로길이 n, 가로길이 m이 주어지며, 1 2023. 1. 24.
[코딩 테스트] DFS BFS 개념 - 스택 큐 자료구조 재귀함수 기초 DFS BFS란, 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 탐색(Search)이라고 하며, DFS와 BFS는 대표적인 그래프 탐색 알고리즘이다. 코딩테스트에서 매우 자주 등장하는 유형이다. 스택 자료구조 먼저 들어온 데이터가 나중에 나가는 형식(선입후출, LIFO - last in first out)의 자료구조. 입구와 출구가 동일하다. 박스 쌓기 예제를 생각하면 된다. 삽입과 삭제, 두 가지가 있다. 파이썬에서는 리스트의 append와 pop을 이용해서, 스택을 구현할 수 있다. append : 우측에 데이터 붙임 pop : 우측의 데이터 삭제 print(list명[::-1]) 하면 최상단 원소부터 출력 가능하다.(리스트를 거꾸로 출력하는 것) 큐 자료구조 먼저 들어온 데이터가 먼저 나가는.. 2023. 1. 23.
[코딩테스트] 구현, 시뮬레이션과 완전 탐색 코딩테스트에서 말하는 구현 문제라는 것은, 풀이(알고리즘)를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제다. -알고리즘은 간단한데 코드가 지나칠 만큼 길어지는 문제 -실수 연산을 다루고, 특정 소수점 자리까지 출력해야 하는 문제 -문자열을 특정 기준에 따라 끊어 처리하는 문제 -적절한 라이브러리를 찾아서 사용해야 하는 문제 ( 순열, 조합을 예로 들면 itertools를 사용해서 대응 가능하지만 이를 모르면 방대하게 구현해야 함) 2차원 공간, 행렬(Matrix)에서의 방향 벡터가 자주 활용된다. #동,북,서,남 : 방향성을 명시해주기 위해서 리스트나 배열 형태로 나타낸다. dx= [0,-1,0,1]#행 dy= [1,0,-1,0]#열 #현재 위치 x,y = 2,2 for i in range(4) .. 2022. 12. 24.
[코딩테스트] 그리디 알고리즘(Greedy), 탐욕법 그리디 알고리즘(Greedy) : 탐욕법 그리디 알고리즘이 뜻하는 것은 한 마디로 지금 상황에서, 지금 당장 좋은 것만 고르는 방법이다. 문제를 풀기 위한 최소한의 아이디어가 중요하며, 정당성(단순히 가장 좋아 보이는 걸 반복적으로 선택해도 최적의 해를 구할 수 있는가?) 검토 및 분석이 필요하다. 사실 일반적으로 그리디 알고리즘은 최적의 해를 보장할 수 없을 때가 많다. 하지만 코딩 테스트에서 대부분의 그리디 문제는 이 그리디 알고리즘으로 얻은 해가 최적의 해가 되는 상황에서, 이를 추론할 수 있어야 풀리도록 출제된다. 그러면 언제 이 그리디 알고리즘으로 구한 값이 최적의 해가 될까? 대표적으로 거스름돈 문제가 있다.(거슬러 주어야 할 동전의 최소 개수를 구하기) 문제1 : 거스름돈 가장 큰 화폐 단위.. 2022. 12. 23.
[코딩테스트] 파이썬 문법 기초 복습 : 입출력부터 자주 쓰이는 라이브러리까지 자주 사용되는 입력 방법 input() : 한 줄의 문자열을 입력받는 함수 map() : 리스트의 모든 원소에 각각 특정한 함수를 적용 ex)공백 기준으로 구분된 데이터 입력받을 때 n = int(input()) data = list(map(int, input().split())) data.sort(reverse=True) print(data) a,b,c = map(int,input().split()) #이렇게 변수 갯수를 지정해줄 수도 있다. print(a,b,c) 빠르게 입력 받으려면 sys library의 sys.stdin.readline() 메서드를 이용하면 된다. 단, 입력 후 enter가 줄 바꿈 기호로 입력되므로 rstrip() 메서드를 그 다음에 사용해주자. import sys data =.. 2022. 12. 20.