코딩테스트[파이썬]/이것이 코딩테스트다(이코테) 39

[정렬] -두 배열의 원소 교체

N개의 원소를 가진 서로다른 배열 A,B가 있을 때 K번 교환하여 A의 원소의 총합을 최대로 하라. 입력 예시) 5 3 1 2 5 4 3 5 5 6 6 5 출력 예시) 26 나의코드 n,k=map(int,input().split()) arrA=list(map(int,input().split())) arrB=list(map(int,input().split())) arrA.sort() arrB.sort(reverse=True) for i in range(k): arrA[i],arrB[i]=arrB[i],arrA[i] print(sum(arrA)) 각각의 배열을 입력 받은뒤 A배열은 오른차순으로 B배열은 내림차순으로 정렬한다. 그 후 k번 만큼 0번 인덱스 부터 스와프 해준다. 정답 코드 n, k = map(..

[정렬] -성적이 낮은 순서로 학생 출력하기

N명의 학생정보가 이름과 성적으로 입력이 될때 성적이 낮은 순서대로 학생의 이름을 출력하라. 입력예시) 2 홍길동 95 이순신 77 출력 예시) 이순신 홍길동 나의 코드 N=int(input()) arr=[] for i in range(N): arr.append(list(map(str,input().split()))) arr[i][1]=int(arr[i][1]) arr.sort(key=lambda x:x[1]) for i in range(N): print(arr[i][0], end=' ') 빈 배열에 str타입의 리스트로 입력을 받은 값들을 추가 하며 1번 인덱스인 성적을 다시 정수화 한다. 그 후 sort 함수의 key에 람다함수를 적용해 1번 인덱스를 기준으로 정렬한다. 정답코드 # N 입력 받기 n..

[정렬] -위에서 아래로

수열을 내림차순으로 정렬하는 프로그램을 만드시오. 입력 예시) 3 15 27 12 출력예시 ) 27 15 12 나의 코드 n=int(input()) arr=[] for _ in range(n): arr.append(int(input())) arr.sort(reverse=True) print(arr) 처음 수열의 크기를 입력 받은 뒤 그 크기 만큼 반복문을 돌며 리스트에 추가한다. 그후 한번에 sort함수로 reverse옵션으로 정렬을 한다. 정답 코드 # N 입력 받기 n = int(input()) # N개의 정수를 입력 받아 리스트에 저장 array = [] for i in range(n): array.append(int(input())) # 파이썬 정렬 라이브러리를 이용하여 내림차순 정렬 수행 arr..

[정렬] -계수정렬

계수정렬 - 특정한 조건이 부합할 때만 사용할 수 있지만 매우 빠른 정렬 알고리즘이다 - 데이터의 크기 범위가 제한되어 정수 형태로 표현할 수 있을 때 사용 가능하다 - 모든 데이터가 양의 정수인 상황을 가정했을때, 데이터의 개수가 N개고 데이터 중 최댓값이 K일 때 최악의 경우에도 수행시간 O(N+K)를 보장한다 - 가장 큰 데이터와 가장 작은 데이터의 차이가 1,000,000을 넘지 않을 때 효과적으로 사용가능하다 - 모든 범위를 담을 수 있는 크기의 리스트(배열)를 선언해야 하기 때문에, 가장 큰 데이터와 가장 작은 데이터의 차이가 너무 크다면 계수 정렬을 사용할 수 없다 - 앞서 다룬 알고리즘과 달리 직접 데이터의 값을 비교한 뒤 위치를 변경하며 정렬하는 비교 기반의 정렬 알고리즘이 아니다 - 계..

[정렬] - 퀵정렬

퀵정렬 - 병합 알고리즘과 더불어 대부분의 라이브러리의 근간이 되는 가장 많이 사용되는 알고리즘이다. - 기준(피벗(Pivot))을 설정한 다음 큰 수와 작은 수를 교환한 후 리스트를 반으로 나누는 방식으로 동작한다 - 피벗을 설정하고 리스트를 분할하는 방법에 따라서 여러가지 방식으로 퀵 정렬을 구분하는데, 가장 대표적인 분할 방식인 호어 분할(Hoare Partition) 방식(리스트의 첫 데이터를 피벗으로 설정)을 기준으로 퀵 정렬을 이해해 보자. 피벗을 설정한 후 왼쪽에서부터 피벗보다 큰 데이터를 찾고, 오른쪽에서부터 피벗보다 작은 데이터를 찾는다 그 다음 큰 데이터와 작은 데이터의 위치를 서로 교환한다 ==> 위 과정을 반복하면 피벗에 대하여 정렬이 수행 이해의 편의를 위해 크게 3개의 파트로 나..

[정렬] - 삽입정렬

삽입정렬 - 처리되지 않은 특정한 데이터를 하나씩 골라 적절한 위치에 삽입 - 선택 정렬보다 실행 시간이 조금 더 효율적이다 - 특히, 데이터가 정렬 되어 있을 때 더욱 효과적이다. (선택 정렬은 현재 데이터의 상태와 상관없이 무조건 모든 원소를 비교한다) - 특정한 데이터가 적절한 위치에 들어가기 이전에, 그 앞의 데이터들은 이미 정렬되어 있다고 가정한다 - 정렬되어 있는 앞쪽의 데이터 리스트에서 적절한 위치를 찾은 후, 그 위치에 삽입 첫번째 데이터는 그 자체로 정렬되어 있다고 판단하기 때문에 두번째 데이터부터 시작 STEP 0) 5가 들어갈 수 있는 위치는 앞 쪽의 데이터인 7의 왼쪽이나 오른쪽, 총 2가지 경우만 존재한다. 우리는 카드를 오름차순으로 정렬할 것이기 때문에 7의 왼쪽에 삽입한다 ST..

[정렬] 선택정렬

연속된데이터를기준에따라서정렬하기위한알고리즘 정렬 이란 데이터를 특정한 기준에 따라서 순서대로 나열 하는것이다. 정렬을 통해 이진탐색이 가능해진다. 수많은 정렬 알고리즘이 있지만 선택정렬, 삽입 정렬, 퀵 정렬, 계수 정렬 정도만 학습하자. 면접에도 자주 나오는 알고리즘이니 빠삭하게 알아 두고 가자 ! 선택정렬 - 처리되지 않은 데이터 중 가장 작은 데이터를 선택하여 맨 앞의 뎅터와 바꾸는 것을 반복 - '가장 작은것을 선택' 한다는 점에서 선택 정렬이라고 불린다. STEP 0) 초기단계에서는모든데이터가정렬되어있지않으므로, 전체중에서가장작은데이터를선택한다. 따라서 0 을선택해 맨 앞에 있는 데이터7과 바꾼다. STEP 1) 이제 정렬된 첫번쨰 데이터는 제외하고 그 뒤의 데이터 중에서 가장 작은 데이터인 1..

[DFS] -미로탈출

미로탈출 N x M 공간에 괴물이 있는 부분은 0, 괴물이 없는 부분은 1로 표시되어 있다. 이 때 동빈은 (1,1) 즉, 왼쪽 상단에 있을 때 (N,M)즉, 오른쪽 최하단에 있는 미로로 최단 경로로 갈 때 시작 칸과 마지막 칸을 포함하여 총 몇칸을 지나는지 출력 하시오. 입력 예시) 5 6 101010 111111 000001 111111 111111 출력예시) 10 나의 코드 from collections import deque def BFS(x,y,arr): print(n,m) dq=deque() dq.append([0,0]) dx=[-1,0,1,0] dy=[0,1,0,-1] L=0 while True: D=len(dq) for _ in range(D): x,y=dq.popleft() if x==n..

[DFS] -음료수 얼려 먹기

N x M 크기의 얼음 틀이 있다. 0은 구멍이 뚫려있는 부분, 1은 칸막이가 존재하는 부분이다. 구멍이 뚫려 있는 부분끼리 상하좌우로 붙어 있는경우 서로 연결된 것으로 간주한다. 이때 연결된 한 덩어리를 아이스크림 1개라고 할때 몇개의 아이스크림이 생성 되는가? 입력 예시) 4 5 00110 00011 11111 00000 출력 예시) 3 나의 코드 def DFS(x,y,arr): arr[x][y]=1 dx=[-1,0,1,0] dy=[0,1,0,-1] for k in range(4): nx=x+dx[k] ny=y+dy[k] if 0

[DFS/BFS] 이해를 위한 기본 자료구조 및 알고리즘

꼭 필요한 자료구조 기초 탐색 : 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정 - 그래프, 트리 등의 자료구조 안에서 탐색하는 문제를 자주 다룬다. - 스택과 큐, 재귀 함수에 대한 이해가 전제 되어야 DFS/BFS를 잘 활용할 수 있다. 인접 행렬 vs 인접 리스트 1. 인접 행렬 - 장점: 두 노드의 간선의 존재 여부를 바로 알 수 있다 - 단점: 모든 관계를 기록함으로 노드의 개수가 많을 수록 불필요한 메모리 낭비가 일어난다 2. 인접 리스트 - 장점: 연결된 것들만 기록하여 어떤 노드의 인접한 노드들을 바로 알 수 있다 - 단점: 두 노드가 연결되어 있는지에 대한 정보를 얻는데 속도가 느리다. 인접 행렬은 그래프에 간선이 많이 존재하는 밀집 그래프일 경우 사용 인접 리스트는 간선이 적은 희..