728x90
반응형

자료구조 7

[파이썬] BOJ_9012(괄호)

문제 https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 해설 처음엔 아무 생각 없이 '('의 개수와 ')'의 개수를 세서 같으면 YES, 다르면 NO를 출력했었는데 그러면 안된다. ')'이 '('보다 먼저 있으면 괄호가 제대로 닫기지 않기 때문이다. 짝을 맞춰보려면 '('이 나왔을 경우 스택에 넣어주고 ')'이 나오면 스택에 들어있던 '('을 pop해준다. 대신 스택에 아무것도 없는데 ')'이 나오면 더이상 볼 것도..

알고리즘/백준 2023.06.26

[파이썬] BOJ_2605(줄 세우기)

문제 https://www.acmicpc.net/problem/2605 2605번: 줄 세우기 점심시간이 되면 반 학생 모두가 한 줄로 줄을 서서 급식을 탄다. 그런데 매일 같이 앞자리에 앉은 학생들이 앞에 줄을 서 먼저 점심을 먹고, 뒷자리에 앉은 학생들은 뒤에 줄을 서 늦게 점심을 www.acmicpc.net 해설 이 문제의 핵심은 뽑은 번호대로 그 위치에 줄을 선다는 것이다. 리스트의 insert()를 이용하면 특정 위치에 요소를 삽입할 수 있다. 번호의 순서가 제일 오른쪽이 가장 빠른 번호가 위치 하기 때문에 리스트를 역순으로 뒤집어서 출력해주면 끝이다. 코드 -파이썬 #백준 2605(줄 세우기) n = int(input()) #학생 수 num = [*map(int, input().split())..

알고리즘/백준 2023.06.11

[파이썬] BOJ_17608(막대기)

문제 https://www.acmicpc.net/problem/17608 17608번: 막대기 아래 그림처럼 높이만 다르고 (같은 높이의 막대기가 있을 수 있음) 모양이 같은 막대기를 일렬로 세운 후, 왼쪽부터 차례로 번호를 붙인다. 각 막대기의 높이는 그림에서 보인 것처럼 순서대로 www.acmicpc.net 해설 가장 뒤의 막대기는 항상 보여지기 때문에 cnt를 1로 초기화 해준다. 뒤부터 비교하면서 더 큰 막대기가 나오면 cnt를 +1해주고 비교값인 stick을 해당 막대기로 바꿔 비교해나간다. 이렇게 해야 큰 막대기 뒤에 가려지는 막대기들을 가려낼 수 있다. 코드 -파이썬 #백준 17608(막대기) import sys input = sys.stdin.readline n = int(input()) ..

알고리즘/백준 2022.11.07

[파이썬] BOJ_10866(덱)

문제 https://www.acmicpc.net/problem/10866 10866번: 덱 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 해설 문제 제목대로 덱을 이용하여 풀면 된다. 코드 -파이썬 #백준 10866(덱) from collections import deque import sys n = int(sys.stdin.readline()) deq = deque() for i in range(n): x = sys.stdin.readline().split() if x[0] == 'push_front': de..

알고리즘/백준 2022.06.10

[파이썬] BOJ_10828(스택)

문제 https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 해설 이 문제는 가장 기본적인 스택 문제이다. 코드 -파이썬 #백준 10828(스택) import sys n = int(sys.stdin.readline()) stack = [] for i in range(n): x = sys.stdin.readline().split() if x[0] == "push": stack.append(x[1]) if x[0] == "pop": if..

알고리즘/백준 2022.05.24

[파이썬] BOJ_1302(베스트셀러)

문제 www.acmicpc.net/problem/1302 1302번: 베스트셀러 첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고 www.acmicpc.net 해설 이 문제는 가장 많이 팔린 책의 제목을 출력하는 문제인데, 베스트셀러가 여러권일 경우, 사전상 가장 먼저 오는 책을 출력해야 한다. 이런 경우엔 리스트를 오름차순으로 배열해놓기만 하면 쉽게 풀 수 있다. 베스트셀러를 구하는 것은 collections 모듈을 사용한다면 두 줄이면 가능하다. 코드 -파이썬 #백준 1302(베스트셀러) import collections n = int(input())..

알고리즘/백준 2021.04.17

[파이썬] BOJ_15903(카드 합체 놀이)

문제 https://www.acmicpc.net/problem/15903 15903번: 카드 합체 놀이 첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1, www.acmicpc.net 해설 이 문제는 다음과 같은 2가지 과정을 통해 카드 합체를 하는 문제이다. x번 카드와 y번 카드를 골라 그 두 장에 쓰여진 수를 더한 값을 계산한다. (x ≠ y) 계산한 값을 x번 카드와 y번 카드 두 장 모두에 덮어 쓴다. 위와 같은 과정을 m번 거쳤을 때 모든 카드의 합이 최소가 되게 하는 것이 목표이므로, 매번 고르는 x번 카드와 y번 카드는 ..

알고리즘/백준 2021.02.17
728x90
반응형