본문 바로가기

Problem Solving24

[백준 BOJ - 4358 / 파이썬] 생태학 4358번: 생태학 (acmicpc.net) 4358번: 생태학 프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어 www.acmicpc.net 🔍 문제 분석 등장하는 원소 비율을 정렬해서 출력하는 문제 ❗ 해결 아이디어 입력이 들어오지 않을 때까지 입력받는 방법을 배웠다. 이외의 부분은 딕셔너리를 활용해 비율을 계산하면 된다. ✔️ 최종 풀이 import sys dict_of_trees = {} while True: type_of_tree = sys.stdin.readline().rstrip() if not type_of_tree: break if.. 2022. 9. 4.
[백준 BOJ - 1918 / 파이썬] 후위 표기식 1918번: 후위 표기식 (acmicpc.net) 1918번: 후위 표기식 첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 www.acmicpc.net 🔍 문제 분석 중위표기식을 후위표기식으로 변환하는 문제 ❗ 해결 아이디어 우선순위가 낮은 연산자가 나올 때까지 stack에 저장한 후 pop 괄호는 따로 연산 ✔️ 최종 풀이 import sys operator = sys.stdin.readline().rstrip() stack = [] answer = "" for token in operator: if 'A' 2022. 8. 28.
[백준 BOJ - 2493 / 파이썬] 탑 2493번: 탑 (acmicpc.net) 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net 🔍 문제 분석 각 탑에서 보내는 신호를 어느 탑에서 수신하는지 알아내는 프로그램 ❗ 해결 아이디어 자신보다 큰 타워 중 가장 가까운 타워가 신호를 받게 되므로, 그 외 타워는 고려하지 않음 ✔️ 최종 풀이 import sys n = int(sys.stdin.readline()) tower = list(map(int, sys.stdin.readline().split())) prev_tower = [] result = [].. 2022. 8. 28.
[백준 BOJ - 1620 / 파이썬] 나는야 포켓몬 마스터 이다솜 1620번: 나는야 포켓몬 마스터 이다솜 (acmicpc.net) 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net 🔍 문제 분석 포켓몬 도감에서 탐색을 진행함. 번호를 입력받으면 포켓몬 이름을, 포켓몬 이름을 입력 받으면 도감의 번호를 출력하는 문제 ❗ 해결 아이디어 번호:포켓몬 쌍의 딕셔너리와 포켓몬:도감 쌍의 딕셔너리를 따로 만들어 탐색을 진행함 ✔️ 최종 풀이 import sys n, m = map(int, sys.stdin.readline().split()) num_to_p.. 2022. 8. 4.
[백준 BOJ - 2504 / 파이썬] 괄호의 값 2504번: 괄호의 값 (acmicpc.net) 2504번: 괄호의 값 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 www.acmicpc.net 🔍 문제 분석 괄호가 올바르다면, 조건에 맞게 괄호에 값을 할당하여 계산하는 문제 ❗ 해결 아이디어 처음에는 괄호가 올바른지 검사하는 단계와 값을 계산하는 단계를 한번에 진행했었는데, 예외 처리 코드가 복잡해져서 과정을 직관적으로 따라가기 어려웠다. 따라서 괄호가 올바른지 검사하는 단계를 분리하여 과정을 단순화하였다. 이전 괄호의 프로세스를 따와서, 괄호가 올바른 경우에만 점수 계산 단계로 넘어가니 한결 수월하게.. 2022. 8. 1.
[백준 BOJ - 2346 / 파이썬] 풍선 터뜨리기 2346번: 풍선 터뜨리기 (acmicpc.net) 2346번: 풍선 터뜨리기 1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선 www.acmicpc.net 🔍 문제 분석 이전의 요세푸스 문제와 유사하게, 원을 이루며 있는 풍선들을 주어진 만큼씩 이동하며 탐색 순서를 찾는 문제 ❗ 해결 아이디어 이전의 문제와 유사하지만 ±방향 모두로 이동할 수 있다. 따라서 두 경우를 나누어 생각하는 것이 중요 ✔️ 최종 풀이 import sys n = int(sys.stdin.readline()) balloons = list(enumerate(map(int, s.. 2022. 7. 30.
[백준 BOJ - 1966 / 파이썬] 프린터 큐 1966번: 프린터 큐 (acmicpc.net) 1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net 🔍 문제 분석 문서들의 우선순위가 주어진다. target index가 몇 번째로 출력되는지 계산하는 문제 ❗ 해결 아이디어 리스트 두 개를 함께 돌리는 것이 핵심. 리스트 하나로 처리하게 되면, 우선순위가 중복되는 경우를 생각하기 복잡해진다. ✔️ 최종 풀이 import sys n = int(sys.stdin.readline()) for _ in range(n): doc_cnt, target = map(int,sys... 2022. 7. 30.
[백준 BOJ - 10799 / 파이썬] 쇠막대기 10799번: 쇠막대기 (acmicpc.net) 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net 🔍 문제 분석 쌓인 layer를 레이저로 잘랐을 때 최종적으로 몇 조각이 되는지 계산하는 문제 ❗ 해결 아이디어 레이저는 다른 괄호와 헷갈리지 않도록 다른 문자로 치환한다. "R" 레이저 "R"은 쌓인 layer만큼의 count를 추가한다. 여는 괄호 "(" 는 layer를 한 층 추가한다. 닫는 괄호 ")" 는 layer의 끝을 의미하므로 자투리를 count하여 +1한다. ✔️ 최종 풀이 import sys sticks = .. 2022. 7. 27.
[백준 BOJ - 1935 / 파이썬] 후위 표기식2 1935번: 후위 표기식2 (acmicpc.net) 1935번: 후위 표기식2 첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이 www.acmicpc.net 🔍 문제 분석 우리가 보통 사용하는 2*3+1-4/5는 중위표기식, 123*+45/-는 후위표기식이다. 후위표기식 연산을 구현하는 문제 ❗ 해결 아이디어 연산자 우선 순위를 고려하여 문자열이 주어지므로, 결과 리스트에 순서대로 입력을 받은 후, pop을 통해 결과 도출 ✔️ 최종 풀이 import sys n = int(sys.stdin.readline()) operator = sys.stdin.rea.. 2022. 7. 26.