백준 문제풀이 37

[백준] 2839 설탕 배달 - python

https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 처음에 내가 짠 계획 1. 가장 적게 들기 위해 더 큰수인 5로 나눈다 2. 5로 나누고 나온 나머지를 3으로 나눴을 때, 나누어 떨어지는 지 확인 -> 안나눠 떨어지면, 5로 나눈 몫을 계속 줄여가며 체크하고 싶음 근데 어떻게 짜야할지 모르겠다 !! 3. 5로만 나누어 떨어지면 그것이 답 4. 3으로만 나누어 떨어지면 이것도 답일 수 있음 구현 시도 나름 생각한대로 짜보려고 노력했는데 , , 만약 3으로도..

[백준] 1436 영화감독 숌 - python

https://www.acmicpc.net/problem/1436 1436번: 영화감독 숌 666은 종말을 나타내는 수라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워 www.acmicpc.net 처음에 그냥 입력받은 N-1 + '666'만 붙이면 되는 줄 알고, 뭐야 이거 쉽네? 했으나 N = 187 을 보고, 쟤 왜 저러지. 잘못 이해했음을 깨달았다 !! 무조건 N + 666 이게 아니고 . . 6660 6661 6662 6663 6664 이런게 잔뜩 존재한다는 점, 심지어 N은 최대 만까지도 간다는 점 . . 내가 한 생각 : 처음엔 그냥 숫자 다돌려서 리스트를 만들고, 거기서 66..

[백준] 1018 체스판 다시 칠하기 - python

https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 첫번째 난관, 8*8로 어떻게 잘라낼 것인가. -> 반복문을 N-7 / M-7로 쪼개서 N-7부터 +8까지 이런식으로 반복문을 돌린다 두번째 난관, 카운트 어떻게 ? 처음엔 그냥 'W'인거 다 센다음에 64에서 빼서 그 차이만큼 카운트하려고 했으나 . . 개수만 문제가 아니라, W와 B가 번갈아 가면서 나와야함 !! -> W로 시작할때랑 B로 시작할때를 따로 카운트함 실버4가 왜이렇게 어려..

[백준] 9935 문자열 폭발 - python

9935번: 문자열 폭발 (acmicpc.net) 9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net 우리 조원이 강력추천한 문제다. stack + 노가다로 풀었다 교수님이 푼 코드 보니까 훨 짧던데, 난 아직 모자르니까 ! 그래도 풀어서 뿌듯 ~ stack = [] txt = list(input()) txt_s = list(input()) h = len(txt_s) for i in range(len(txt)): # txt_s의 길이보다 stack이 작으면 계속 쌓기 if len(stack) < h..

[백준] 2493 탑 - python

https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net 골드인데 할만해보여서 덤볐다가 교수님과 2시간 잡고 있었다. 무지랭이를 도와주시려고 계속 옆에서 알려주신 교수님께 이영광을 내가(교수님의도움을받아^^) 푼 코드 num = int(input()) li = list(map(int,input().split())) temp = [] ans =[] for j in range(len(li)): # 첫번째 숫자는 무조건 0 flag = True for i ..

[백준] 1874 스택수열 - python

https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 도대체 뭔소린지 . . 이틀 고민함 입력과 출력이 왜저런지는 알겠다. 근데 이렇게 구현되는 코드를 짜는 건 어케하는지 모르겠다. 그래서 그냥 구글에서 찾아봤다. stack은 오름차순으로 쌓인다는 성질을 이용하면 은근 쉬운 문제였음 n = int(input()) stack, ans, find = [], [], True..

[백준] 9012 괄호 -python

https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 내가 처음에 짠 코드 n = int(input()) for i in range(n): x = list(input()) l_cnt = 0 r_cnt = 0 for i in range(len(x)): if x[i] == '(': l_cnt += 1 else : r_cnt += 1 if l_cnt == r_cnt : if x[-1] == ')': print('YES') e..

[백준] 10828 스택 -python

https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net input() 썻다가 시간초과에 걸렸던 것 같다 ( 어제푼건데 그새 까먹은 ) 이미 큐를 겪어서 그런가 금방 풀었다! import sys num = int(input()) temp = [] for i in range(num): com = sys.stdin.readline().split() if com[0] == 'push': temp.append(com[-1]) elif com[..

[백준] 2164 카드2 -python

https://www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net deque를 활용하면 쉽게 풀 수 있음 ! from collections import deque num = int(input()) temp = deque([]) for i in range(num) : temp.append(i+1) while len(temp) > 1: temp.popleft() pops = temp.popleft() temp.append(pops) print(temp[0])

[백준] 1158 요세푸스 문제 - python

https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net pop하면서 동시에 append가 되는지 몰랐음 그래서 pop하고 그 다음줄에 append하고 . . 이런 바보짓의 연속이였다. 구상까지는 했는데, total의 길이를 넘어갔을 때, total의 길이가 줄었을 때 어떡하지~~ 하다가 그냥 나누고 나머지만큼만 가면 된다는 것을 알아챔 join을 잘 활용하자. 인덱스를 따로 만들면 되는데 바보같이 i += num -1 하다가 . . 이러면 안되는데? 계속 이런 반복이였다. 나는 밥오 total, num= map(int,input().split..