분류 전체보기 364

[Python] 완주하지 못한 선수

1. 문제 2. 풀이 과정 방법 1) 아스키코드를 기준으로 정렬한 후, 앞에서부터 순차 탐색한다. def solution(participant, completion): participant.sort() completion.sort() answer = '' for i in range(len(completion)): if participant[i] != completion[i]: answer = participant[i] break if answer == '': answer = participant[-1] return answer 방법 2) collections 라이브러리 활용하기 collections.Counter(배열) => 사전 형태로 {'배열 속의 데이터' : 개수, ... } 를 반환한다.빼기 연산..

[Python_Search] 백준 2470번 : 두 용액

1. 문제 https://www.acmicpc.net/problem/2470 2470번: 두 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00 www.acmicpc.net 2. 풀이 과정 n = int(input()) A = list(map(int, input().split())) A.sort() l = 0 r = n-1 result = [A[l], A[r]] while l < r: a = A[l] + A[r] if abs(a) < abs(sum(result)): #절댓값이 제일 작은 값 저장 result = [A[l],..

[Python_Search] 백준 1300 : K번째 수

1. 문제 https://www.acmicpc.net/problem/1300 1300번: K번째 수 세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자. 배열 A와 B www.acmicpc.net 2. 풀이 과정 n이 5이고 검사하는 값을 mid = 6이라고 할 때, 6보다 작거나 같은 값의 수는 아래와 같다. 1*1, 1*2, 1*3, 1*4, 1*5 2*1, 2*2, 2*3, 2*4 ,2*5 3*1, 3*2, 3*3, 3*4, 3*5 4*1, 4*2, 4*3, 4*4, 4*5 5*1, 5*2, 5*3, 5*4, 5*5 각 행에서 6보다 작은 값의..

[Python_Search] 백준 12015번 : 가장 긴 증가하는 부분 수열 2

1. 문제 https://www.acmicpc.net/problem/12015 12015번: 가장 긴 증가하는 부분 수열 2 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000) www.acmicpc.net 2. 풀이과정 입력된 값을 하나씩 읽어가면서, 결과 배열에 들어갈 위치를 이진탐색을 통해 찾는다. #입력 : 10 20 15 30 70 50 10 10 20 10 15 10 15 30 10 15 30 70 10 15 30 50 결과 배열의 마지막 값보다 크면 제일 뒤에 추가하고, 아니면 자기보다 작은 값들의 뒷자리를 차지하도록 만든다. 방법 1) 이진탐색 구현 import sys inp..

[Python_Search] 백준 10816번 : 숫자 카드 2

1. 문제 https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 2. 풀이 과정 방법 1) 다음 코드에서는 사전 자료형을 사용하였다. - 이진탐색을 시도했으나 시간 초과로 실패하였다. 하나의 값을 찾을 땐 효율적이지만, 다수의 값을 찾고 그 값들이 중복 가능할 때는 특정 값의 개수를 저장해놓고 꺼내서 출력하는 것이 더 빠르다. import sys input = sys.stdin.readline n = int(inpu..

[Python_DynamicProgramming] 백준 11053번 : 가장 긴 증가하는 부분 수열

1. 문제 https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 2. 풀이 과정 방법 1) 자신의 앞에 있는 값들 중 자신과 작으면서 길이가 최대인 값에 1을 더한 값이 자신이 최대가 될 수 있는 값이다. n = int(input()) arr = list(map(int, input().split())) result = [0]*(n) result[0] = 1 for i in..

[Python_DynamicProgramming] 백준 11726번 : 2xn 타일링

1. 문제 https://www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 2. 풀이 과정 피보나치 수열이 사용되는데, 이유는 아래 그림을 참고하길 바란다. n= int(input()) def case_count(n): if n

[Python_DFS&BFS] 백준 1987번 : 알파벳

1. 문제 https://www.acmicpc.net/problem/1987 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net 2. 풀이과정 방법 1) DFS 이용 - Python 시간 초과, PyPy로 제출 import sys input = sys.stdin.readline n, m = map(int, input().split()) graph = [input() for _ in range(n)] visited = [False]*26 dx = [-1, 0, 1, 0] dy = [0, 1, 0, -1] r..

[Python_DFS&BFS] 백준 14502번 : 연구소

1. 문제 https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 2. 풀이 과정 필요한 개념 : 조합, BFS 3개의 벽을 어디 세울지에 대해 조합을 사용하고, virus가 퍼지는 과정을 BFS를 통해 수행한다. 방법1) 재귀를 이용한 조합 import sys, copy, collections input = sys.stdin.readline n, m = map(int, input().split()) dx = [-1, 0, 1, 0] dy = [0, 1, 0, -..