본문 바로가기

전체 글

(208)
트리 색칠하기(백준 24230) https://www.acmicpc.net/problem/24230 24230번: 트리 색칠하기 정점이 $N$개인 트리가 있다. 정점에는 1부터 $N$까지 번호가 붙어있다. 트리의 루트는 항상 1번 정점이며 맨 처음에는 모든 정점이 하얀색으로 칠해져 있는 상태이다. 하나의 정점에 색칠하면 해 www.acmicpc.net 처음에는 트리를 순회하며 색을 칠하려 했으나 시간 초과로 인해 다른 방법을 찾아야 했다. 다른 풀이법을 보니 부모와 자식 노드의 색이 다르면 색을 1회 칠한 것으로 처리해서 색칠 횟수를 구하면 된다. 추가로 트리의 가장 첫 번째 노드가 색이 흰색이 아니면 정답에 1을 더한다. import sys # 표준 입력을 더 빠르게 받기 위해 sys.stdin.readline 사용 input = s..
DNA 비밀번호(백준 12891) https://www.acmicpc.net/problem/12891 12891번: DNA 비밀번호 평소에 문자열을 가지고 노는 것을 좋아하는 민호는 DNA 문자열을 알게 되었다. DNA 문자열은 모든 문자열에 등장하는 문자가 {‘A’, ‘C’, ‘G’, ‘T’} 인 문자열을 말한다. 예를 들어 “ACKA” www.acmicpc.net 문자열에서 한 칸씩 오른쪽으로 이동하며 주어진 조건을 충족하는 지 확인한다. n, m = map(int, input().split()) string = input().rstrip() a, c, g, t = map(int, input().split()) target_dict = {'A': a, 'C': c, 'G': g, 'T': t} # 현재 윈도우에서 각 문자의 빈도를 추..
애너그램(백준 6996) https://www.acmicpc.net/problem/6996 6996번: 애너그램 첫째 줄에 테스트 케이스의 개수(
수학숙제 (백준2870) https://www.acmicpc.net/problem/2870 2870번: 수학숙제 종이에서 찾은 숫자의 개수를 M이라고 하면, 출력은 M줄로 이루어져야 한다. 각 줄에는 종이에서 찾은 숫자를 하나씩 출력해야 한다. 이때, 비내림차순으로 출력해야 한다. 비내림차순은 내림차 www.acmicpc.net 영어 소문자와 숫자가 섞여있는 문자열에서 숫자들만 뽑아내서 새로운 배열을 만들고 정렬하면 된다. 해당코드는 정규식을 사용한 알고리즘이다. \d+는 정규식에서 숫자들을 지칭하는 메타문자이다. import re n =int(input()) def extract_numbers(s): # 문자열 s에서 숫자만 찾아 리스트로 반환 numbers = re.findall(r'\d+', s) return numbers..
아시아 정보올림피아드(백준 2535) https://www.acmicpc.net/problem/2535 2535번: 아시아 정보올림피아드 첫 번째 줄에는 대회참가 학생 수를 나타내는 N이 주어진다. 단, 3 ≤ N ≤ 100이다. 두 번째 줄부터 N개의 줄에는 각 줄마다 한 학생의 소속 국가 번호, 학생 번호, 그리고 성적이 하나의 빈칸을 사 www.acmicpc.net 1번 2번 국가가 같은 겨우에 이와 다른 국가의 참가자를 찾는 경우만 잘 처리하면 된다. n =int(input()) arr=[] for i in range(n): a,b,c = map(int, input().split()) arr.append((a,b,c)) arr.sort(key=lambda x :-x[2]) firstcon,secondcon=arr[0][0], arr[..
좋다 (백준 1253) https://www.acmicpc.net/problem/1253 1253번: 좋다 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수) www.acmicpc.net 매번 배열의 숫자를 보고 나머지의 숫자 2개를 더해 만들 수 있는 지 확인하면 된다. 포인터 2개를 써서 처리하면 더 빠르게 가능하다. n =int(input()) arr =list(map(int, input().split())) arr.sort() cnt = 0 def find(arr,target): s,e =0,len(arr)-1 while starget: e -=1 else : s+=1 return 0 for i in ..
단어순서 뒤집기(백준 12605) https://www.acmicpc.net/problem/12605 12605번: 단어순서 뒤집기 스페이스로 띄어쓰기 된 단어들의 리스트가 주어질때, 단어들을 반대 순서로 뒤집어라. 각 라인은 w개의 영단어로 이루어져 있으며, 총 L개의 알파벳을 가진다. 각 행은 알파벳과 스페이스로만 www.acmicpc.net 문자열을 받가서 공백을 기준으로 자르고 다시 뒤에서부터 출력하면 된다. n = int(input()) # 사용자로부터 입력받은 숫자 n for i in range(n): string = input().rstrip() # 문자열 입력받기 및 오른쪽 공백 제거 arr = string.split(' ') # 공백을 기준으로 문자열을 분리하여 리스트 생성 print(f"Case #{i+1}: {' '...
두 용액(백준 2470) https://www.acmicpc.net/problem/2470 2470번: 두 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00 www.acmicpc.net 0을 기준으로 두 수의 합이 큰지 작은 지에 따라 인덱스를 조정해주면 된다. n =int(input()) arr =list(map(int ,input().split())) arr.sort() s,e = 0,len(arr)-1 ans= 999999999999999 if n==2 : print(arr[0],arr[1]) exit() find =[] while s