본문 바로가기

CS/Coding Test

(35)
[ 이것이 취업을 위한 코딩 테스트다 with 파이썬 ] Chapter 11 그리디 문제 - Q1 모험가 길드 Q 01 모험가 길드 1) 문제 2) 코드
[ 이것이 취업을 위한 코딩 테스트다 with 파이썬 ] Chapter 09 최단 경로 - 실전문제: 전보 전보 1 _ 문제 어떤 나라 에는 N개의 도시가 있다. 그리고 각 도시는 보내고자 하는 메시지가 있는 경우, 다른 도시로 전보를 보내서 다른 도시로 해당 메세지를 전송할 수 있다. 하지만 X라는 도시에서 Y라는 도시로 전보를 보내고자 한다면, 도시 X에서 Y로 향하는 통로가 설치되어 있어야 한다. 예를 들어 X에서 Y로 향하는 통로는 있지만, Y에서 X로 향하는 통로가 없다면 Y는 X로 메세지를 보낼 수 없다. 또한 통로를 거쳐 메세지를 보낼 때는 일정 시간이 소요된다. 어느날 C라는 도시에서 위급 상황이 발생했다. 그래서 최대한 많은 도시로 메세지를 보내고자 한다. 메시지는 도시 C에서 출발하여 각 도시 사이에 설치된 통로를 거쳐, 최대한 많이 퍼져나갈 것이다. 각 도시의 번호와 통로가 설치되어 있는 ..
[ 이것이 취업을 위한 코딩 테스트다 with 파이썬 ] Chapter 09 최단 경로 - 실전문제: 미래 도시 미래 도시 1 _ 문제 방문 판매원 A는 많은 회사가 모여 있는 공중 미래 도시에 있다. 공중 미래 도시에는 1번부터 N번까지의 회사가 있는데 특정 회사끼리는 서로 도로를 통해 연결되어 있다. 방문 판매원 A는 현재 1번 회사에 위치해 있으며, X번 회사에 방문해 물건을 판매하고자 한다. 공중 미래 도시에서 특정 회사에 도착하기 위한 방법은 회사끼리 연결되어 있는 도로를 이용하는 방법이 유일하다. 또한 연결된 2개의 회사는 양방향으로 이동할 수 있다. 공중 미래 도시에서의 도로는 마하의 속도로 사람을 이동시켜주기 때문에 특정 회사와 다른 회사가 도로로 연결되어 있다면, 정확히 1만큼의 시간으로 이동할 수 있다. 또한 오늘 방문 판매원 A는 기대하던 소개팅에도 참석하고자 한다. 소개팅의 상대는 K번 회사에..
[ 이것이 취업을 위한 코딩 테스트다 with 파이썬 ] Chapter 09 최단 경로 - 이론 및 예제 가장 빠른 길 찾기 1 _ 가장 빠르게 도달하는 방법 최단 경로 (Shortest Path) 알고리즘: 가장 짧은 경로를 찾는 알고리즘 최단 거리 알고리즘 유형 대표 유형: 다익스트라 최단 경로 알고리즘, 플로이드 워셜 알고리즘, 벨만 포드 알고리즘 코딩 테스트에 많이 등장하는 유형: 다익스트라 최단 경로 알고리즘, 플로이드 워셜 알고리즘 최단 경로 문제 표현 방법 보통 그래프응 이용해 표현 각 지점은 '노드', 지점을 연결하는 도로는 '간선' 2 _ 다익스트라 최단 경로 알고리즘 다익스트라(Dijkstra) 최단 경로 알고리즘 그래프에서 여러 개의 노드가 있을 때, 특정한 노드에서 출발하여 다른 노드로 가는 각각의 최단 경로를 구해주는 알고리즘 한 지점에서 다른 특정 지점까지의 최단 경로를 구해야 하는..
[ 이것이 취업을 위한 코딩 테스트다 with 파이썬 ] Chapter 06 정렬 - 실전문제: 두 배열의 원소 교체 두 배열의 원소 교체 1 _ 문제 동빈이는 두 개의 배열 A와 B를 가지고 있다. 두 배열은 N개의 원소로 구성되어 있으며, 배열의 원소는 모두 자연수이다. 동빈이는 최대 K번의 바꿔치기 연산을 수행할 수 있는데, 바꿔치기 연산이란 배열 A에 있는 원소 하나와 배열 B에 있는 원소 하나를 골라서 두 원소를 서로 바꾸는 것을 말한다. 동빈이의 최종 목표는 배열 A의 모든 원소의 합이 최대가 되도록 하는 것이며, 여러분은 동빈이를 도와야 한다. N, K, 그리고 배열 A와 B의 정보가 주어졌을 때, 최대 K번의 바꿔치기 연산을 수행하여 만들 수 있는 배열 A의 모든 원소의 합의 최댓값을 출력하는 프로그램을 작성하시오. 예를 들어 N = 5, K = 3 이고 배열 A와 B가 다음과 같다고 하자. 배열 A = ..
[ 이것이 취업을 위한 코딩 테스트다 with 파이썬 ] Chapter 06 정렬 - 실전문제: 성적이 낮은 순서로 학생 출력하기 성적이 낮은 순서로 학생 출력하기 1 _ 문제 N명의 학생 정보가 있다. 학생 정보는 학생의 이름과 학생의 성적으로 구분된다. 각 학생의 이름과 성적 정보가 주어졌을 때 성적이 낮은 순서대로 학생의 이름을 출력하는 프로그램을 작성하시오. 입력조건 첫 번째 줄에 학생의 수 N이 입력된다. (1 ≤ N ≤ 100,000) 두 번째 줄부터 N + 1 번째 줄에는 학생의 이름을 나타내는 문자열 A와 학생의 성적을 나타내는 정수 B가 공백으로 구분되어 입력된다. 문자열 A의 길이와 학생의 성적은 100 이하의 자연수이다. 출력조건 모든 학생의 이름을 성적이 낮은 순서대로 출력한다. 성적이 동일한 학생들의 순서는 자유롭게 출력해도 괜찮다. 입출력 예시 2 _ 문제 해설 답안 예시 n = int(input()) ar..
[ 이것이 취업을 위한 코딩 테스트다 with 파이썬 ] Chapter 06 정렬 - 실전문제: 위에서 아래로 위에서 아래로 1 _ 문제 하나의 수열에는 다양한 수가 존재한다. 이러한 수는 크기에 상관없이 나열되어 있다. 이 수를 큰 수부터 작은 수의 순서로 정렬해야 한다. 수열을 내림차순으로 정렬하는 프로그램을 만드시오. 입력조건 첫째 줄에 수열에 속해 있는 수의 개수 N이 주어진다. (1 ≤ N ≤ 500) 둘째 줄부터 N + 1 번째 줄까지 N개의 수가 입력된다. 수의 범위는 1 이상 100,000 이하의 자연수이다. 출력조건 입력으로 주어진 수열이 내림차순으로 정렬된 결과를 공백으로 구분하여 출력한다. 동일한 수의 순서는 자유롭게 출력해도 괜찮다. 입출력 예시 2 _ 문제 해설 답안 예시 n = int(input()) array = [] for i in range(n): array.append(int(in..
[ 이것이 취업을 위한 코딩 테스트다 with 파이썬 ] Chapter 06 정렬 - 기준에 따라 데이터를 정렬 기준에 따라 데이터를 정렬 1 _ 정렬 알고리즘 개요 정렬(Sorting) 데이터를 특정한 기준에 따라서 순서대로 나열 이진 탐색의 전처리 과정 2 _ 선택 정렬 선택 정렬 데이터가 무작위로 있을 때, 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾼다. 그 다음 작은 데이터를 선택해 두번 때 데이터와 바꾼다. 위 과정을 반복한다. 선택 정렬 그림 설명 선택 정렬 소스 코드 array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(len(array)): min_index = i for j in range(i+1, len(array)): if array[min_index] > array[j]: min-index = j array[i], array[min_inde..
[ 이것이 취업을 위한 코딩 테스트다 with 파이썬 ] Chapter 05 DFS/BFS - 실전문제: 미로 탈출 미로 탈출 1 _ 문제 동빈이는 N X M 크기의 직사각형 형태의 미로에 갇혀 있다. 미로에는 여러 마리의 괴물이 있어 이를 피해 탈출해야 한다. 동빈이의 위치는 (1, 1)이고 미로의 출구는 (N, M)의 위치에 존재하며 한 번에 한 칸씩 이동할 수 있다. 이때 괴물이 있는 부분은 0으로, 괴물이 없는 부분은 1로 표시되어 있다. 미로는 반드시 탈출할 수 있는 형태로 제시된다. 이때 동빈이가 탈출하기 위해 움직여야 하는 최소 칸의 개수를 구하시오. 칸을 셀 때는 시작 칸과 마지막 칸을 모두 포함해서 계산한다. 입력 조건 첫째 줄에 두 정수 N, M (4 ≤ N, M ≤ 200)이 주어집니다. 다음 N개의 줄에는 각각 M개의 정수 (0 혹은 1)로 미로의 정보가 주어진다. 각각의 수들은 공백 없이 붙어서..
[ 이것이 취업을 위한 코딩 테스트다 with 파이썬 ] Chapter 05 DFS/BFS - 실전문제: 음료수 얼려 먹기 음료수 얼려 먹기 1 _ 문제 N x M 크기의 얼음 틀이 있다. 구멍이 뚫려 있는 부분은 0, 칸막이가 존재하는 부분은 1로 표시된다. 구멍이 뚫려 있는 부분끼리 상, 하, 좌, 우로 붙어 있는 경우 서로 연결되어 있는 것으로 간주한다. 이때 얼음 틀의 모양이 주어졌을 때 생성되는 총 아이스크림의 개수를 구하는 프로그램을 작성하시오. 다음의 4 x 5 얼음 틀 예시에서는 아이스크림이 총 3개 생성된다. 입력 조건 첫 번째 줄에 얼음 틀의 세로 길이 N과 가로 길이 M이 주어진다. (1 ≤ N, M ≤ 1,000) 두 번째 줄부터 N + 1 번째 줄까지 얼음 틀의 형태가 주어진다. 이때 구멍이 뚫려 있는 부분은 0, 그렇지 않은 부분은 1이다. 출력 조건 한 번에 만들 수 있는 아이스크림의 개수를 출력한..
[ 이것이 취업을 위한 코딩 테스트다 with 파이썬 ] Chapter 05 DFS/BFS - 탐색알고리즘 DFS/BFS 탐색 알고리즘 DFS/BFS 1 _ DFS DFS Depth-First Search 깊이 우선 탐색 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘 인접 행렬(Adjacency Matrix) 2차원 배열로 그래프의 연결 관계를 표현하는 방식 2차원 배열에 각 노드가 연결된 형태를 기록하는 방식 인접 행렬 방식 예제 INF = 999999999 # 무한의 비용 선언 # 2차원 리스트를 이용해 인접 행렬 표현 gragh = [ [0, 7, 5], [7, 0, INF], [5, INF, 0] ] print(gragh) ## 결과 ## [[0, 7, 5], [7, 0, 999999999], [5, 999999999, 0]] 인접 리스트(Adjacency List) 모든 노드에 연결된 노드에 대한 정보를 차례..
[ 이것이 취업을 위한 코딩 테스트다 with 파이썬 ] Chapter 05 DFS/BFS - 꼭 필요한 자료구조 기초 꼭 필요한 자료구조 기초 1 _ 탐색과 자료구조 탐색 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정 대표적인 탐색 알고리: DFS/BFS 자료구조 데이터를 표현하고 관리하기 위한 구조 삽입(Push): 데이터를 삽입한다. 삭제(Pop): 데이터를 삭제한다. 2 _ 스택(Stack) 스택(Stack) 개념 박스 쌓기로 비유할 수 있다. 선입후출(First In Last Out) 구조 또는 후입선출(Last In First Out) 구조 스택 예제 stack = [] # 삽입(5) > 삽입(2) > 삽입(3) > 삽입(7) > 삭제() > 삽입(1) > 삽입(4) > 삭제() stack.append(5) stack.append(2) stack.append(3) stack.append(7) stack.p..