본문 바로가기

전체 글

(48)
[백준 16584][파이썬] Binary String https://www.acmicpc.net/problem/16584 16584번: Binary String A binary string is a non-empty sequence of 0’s and 1’s, e.g., 010110, 1, 11101, etc. Ayu has a favorite binary string S which contains no leading zeroes. She wants to convert S into its decimal representation with her calculator. Unfortunately, her cal www.acmicpc.net 옛날에 백준에서 브론즈만 풀다가 자신감이 생겨서 처음으로 도전한 골드 문제이다. 계속 런타임 에러가 나서 최대한 시간 복잡도..
[백준 10866][파이썬] 덱 https://www.acmicpc.net/problem/10866 10866번: 덱 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net deque를 사용하면 맨 앞에 요소를 삽입할 때 시간 복잡도가 O(n) -> O(1)로 된다고 해서 deque를 사용하였다. from collections import deque import sys input = sys.stdin.readline N = int(input()) dq = deque() for i in range(N): order = input().split() if ..
[백준 5430][파이썬] AC https://www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net R이 나올 때마다 뒤집으면 시간이 더 걸릴 것 같아 리스트 상태가 reverse인지 아닌지만 저장하도록 하였다. 뒤집힌 상태에서는 리스트의 가장 마지막 요소를 없애고 뒤집히지 않은 상태에서는 첫 번째 요소를 없앴다. 가장 마지막에 출력하기 직전에만 reverse 상태에 따라 뒤집을지 말지 정하도록 하였다. import sys input = sys.stdin.readline N = int(input()) for i in range(N): reverse =..
[백준 10845][파이썬] 큐 https://www.acmicpc.net/problem/10845 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net queue 리스트에서 인덱스 0인 곳을 큐의 가장 앞이라 하고 문제를 풀었다. import sys input = sys.stdin.readline N = int(input()) queue = [] for i in range(N): order = input().split() if order[0] == 'push': queue.append(order[1]) elif order[0] =..
[백준 6198][파이썬] 옥상 정원 꾸미기 https://www.acmicpc.net/problem/6198 6198번: 옥상 정원 꾸미기 문제 도시에는 N개의 빌딩이 있다. 빌딩 관리인들은 매우 성실 하기 때문에, 다른 빌딩의 옥상 정원을 벤치마킹 하고 싶어한다. i번째 빌딩의 키가 hi이고, 모든 빌딩은 일렬로 서 있고 오른쪽으 www.acmicpc.net stack을 사용하지 않고 이중 for문을 쓰면 시간 초과가 된다. 계산 횟수를 줄이기 위해 stack을 사용하여 '건물이 바라볼 수 있는 빌딩의 개수'가 아닌 '건물을 바라볼 수 있는 빌딩의 개수'를 구해서 더해줘야 한다. for문이 한 바퀴 돌면 stack에는 가장 왼쪽에 있는 건물의 높이가 추가된다. 이후, for문이 계속 돌면서 자신보다 왼쪽에 있는 건물들 중 stack에 남아있는 ..
[백준 2841][파이썬] 외계인의 기타 연주 https://www.acmicpc.net/problem/2841 2841번: 외계인의 기타 연주 첫째 줄에 멜로디에 포함되어 있는 음의 수 N과 한 줄에 있는 프렛의 수 P가 주어진다. (N ≤ 500,000, 2 ≤ P ≤ 300,000) 다음 N개 줄에는 멜로디의 한 음을 나타내는 두 정수가 주어진다. 첫 번째 정수 www.acmicpc.net 줄이 6개여서 각 줄에 대한 stack을 만들었다. 새로 눌러야 하는 프렛이 그 줄의 스택에서 최대가 될 때까지 스택을 pop 하고 손가락 움직임 횟수에 1을 더했다. pop을 하던 중 스택의 최댓값과 눌러야 하는 프렛이 같은 경우 프렛을 누르는 행동을 다시 할 필요가 없으므로 이 상황에서 움직임 횟수에 1을 더하지 않도록 주의해야 한다. import sys..
[백준 10828][파이썬] 스택 https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 값을 그냥 input()으로 받으면 시간 초과가 발생하기 때문에 sys.stdin.readline으로 값을 받았다. 파이썬에서 list[-1]는 가장 마지막 요소를 가리킨다. 마지막 요소를 print하는 것과 stack의 마지막 요소를 지우는 코드를 따로 쓸 필요 없이 pop만 해주면 마지막 요소도 같이 return한다. import sys input = sys.stdin.rea..
[백준 11399][파이썬] ATM https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 5명이 줄에 서서 기다린다고 가정하면 첫 번째에 선 사람이 돈을 뽑는 걸 기다리는 사람은 4명, 두 번째 사람이 돈 뽑는 걸 기다리는 사람은 3명, 세 번째 사람을 기다리는 사람은 2명, 네 번째 사람을 기다리는 사람은 1명이다. 즉, 기다리는 시간의 합을 최소로 하려면 돈을 빨리 뽑는 사람들이 앞에 서야 한다. (각 사람이 돈을 인출하는데 걸리는 시간의 합) = (각자 돈을 뽑는 데에 걸리는 시간) + (각자 기다린 시간)이..