백준 문제풀이 37

[백준] 18258 큐2 - python

https://www.acmicpc.net/problem/18258 18258번: 큐 2 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 앞에 큐문제랑 똑같은줄 알았는데, 무한 시간초과의 늪에 걸려버렸다 . . 원인 1. .split()이 매번 실행되서 -> .split()말고 어떻게 분리를 한단말임 ?? 원인 2. .pop(0) -> pop은 뒤에서 앞으로 하나하나 건너가기 때문에 얘때문도 있음 leftpop()을 쓰면 알아서 젤 왼쪽 값을 없애준다 !! 그리고 큐 문제를 풀때는 deque를 사용할 것 -..

[백준] 10845 큐 - python

https://www.acmicpc.net/problem/10845 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 처음에 input() 썻다가 시간초과 걸려서 sys.stdin.readline()으로 바꿨더니 해결완 import sys num = int(sys.stdin.readline()) que =[] for i in range(num): txt = sys.stdin.readline().split() if txt[0] =='push': que.append(txt[1]) elif txt[0]..

[백준] 11651 좌표 정렬하기 2 - python

11651번: 좌표 정렬하기 2 (acmicpc.net) 11651번: 좌표 정렬하기 2 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 앞에 했던 11650이랑 아주 유사함. 대신 y를 기준으로 정렬해야하기 때문에 a와 b를 순서를 바꿔 리스트에 쌓았다. 그리고 정렬 후, a와 b의 위치를 바꿔서 출력하면 끝 import sys num = int(sys.stdin.readline()) total = [] for i in range(num): ab = list(map(int,sys.st..

[백준] 11650 좌표 정렬하기 - python

11650번: 좌표 정렬하기 (acmicpc.net) 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 처음엔 . . 앞자리 숫자와 뒷자리 숫자 따로 리스트를 만들어서 줄세워야하나 고민했다. but.. 파이썬은 알아서 두 좌표 정렬도 해주더라 하지만 코테 준비를 위해서는 sort를 쓰지 않고 정렬하는 법도 외우긴 해야겠다. import sys num = int(sys.stdin.readline()) total = [] for i in range(num): ab..

[백준] 2751 수 정렬하기 2 - python

2751번: 수 정렬하기 2 (acmicpc.net) 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net num을 int(input())으로 받았더니 시간초과가 발생함 주의할 것 import sys num = int(sys.stdin.readline()) total =[] for i in range(num): x = int(sys.stdin.readline()) total.append(x) total = sorted(total) for i in total: print(i)

[백준] 10610 30 - python

https://www.acmicpc.net/problem/10610 10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한 www.acmicpc.net 30 배수의 조건 1. 끝자리가 0이여야함 2. 자리수를 모두 더했을 때 3으로 나눠져야한다. 3의 배수 : 3 6 9 12 15 18 21 은 모두 자리수를 더하면 3의 배수임을 이용하자. num을 정렬한 후, 3으로 나누어 떨어지지 않거나, 0이 num에 없으면 -1을 출력하는 방식 사용 num = list((input())) num = sorted(num) sum = 0 for i in num..

[백준] 2875 대회 or 인턴 - python

https://www.acmicpc.net/problem/2875 2875번: 대회 or 인턴 첫째 줄에 N, M, K가 순서대로 주어진다. (0 ≤ M ≤ 100, 0 ≤ N ≤ 100, 0 ≤ K ≤ M+N), www.acmicpc.net 조건을 잘 활용하면 아주 쉬운 문제였다. 카운트 증가 조건에 1. n이 2이상 2. m이 1이상 3. k 인원을 빼고도 팀이 생길 수 있어야 함 = n+m이 k+3 이상이여야함 n, m, k = map(int,input().split()) cnt = 0 while n >= 2 and m >= 1 and n + m >= k+3: n -= 2 m -= 1 cnt += 1 print(cnt)

[백준] 11047 동전 0 - python

https://www.acmicpc.net/problem/11047 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 문제에 주어진 화폐단위가 모두 배수임을 잘 활용하자 ! 나누어 떨어지는 동전 문제를 풀 때는 무조건 제일 큰 단위부터 계산하기 그래서 입력받은 수들을 역으로 계산한다. total을 coin에 들어있는 숫자들로 나누어지면 카운트가 올라가게함. 만약 total이 4300원이면, 4300//1000 == 4가 카운트 되고, total엔 나..

[백준] 11655 ROT13 - python

https://www.acmicpc.net/problem/11655 11655번: ROT13 첫째 줄에 알파벳 대문자, 소문자, 공백, 숫자로만 이루어진 문자열 S가 주어진다. S의 길이는 100을 넘지 않는다. www.acmicpc.net 처음엔 무식하게 알파벳 들어있는 리스트 만들고 거기서 인덱스+13을 하려고했다. but . . 아스키 코드를 사용하면 비교적 쉽게 구할 수 있음. ord(문자) = 아스키 코드 넘버를 출력 출력된 아스키 코드 넘버 +13하면 알아서 13번째 뒤에 알파벳을 꺼내줌. 하지만 총 26개의 알파벳중 13번보다 앞에 번호일 경우에만 13을 더해주고, 13번보다 뒷 번호라면 -13을 해줘야 원하는 값이 나온다. x = input() total = '' for i in x: if..

[백준] 10820 문자열 분석 - python

https://www.acmicpc.net/problem/10820 10820번: 문자열 분석 문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오. 각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있 www.acmicpc.net while True: try : x = list(input()) total = [0]*4 for i in range(len(x)): if x[i].isspace() == True: total[3] +=1 elif x[i].isupper() == True: total[1] +=1 elif x[i].islower() == True: total[0] +=1 elif x[i].isdigit() == ..