알고리즘

문제 링크 https://www.acmicpc.net/problem/10820 10820번: 문자열 분석 문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오. 각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있 www.acmicpc.net 문제 문제 풀이 파이썬의 유용한 함수들을 이용해 간단히 해결할 수 있는 문제이다. 문제의 범위가 주어지지 않았으므로 while을 사용할 경우 무한루프가 돌 수 있음에 유의하고 line이 없을 경우 break하도록 하여 무한루프를 제거한다. import sys while True: line = sys.stdin.readline().rstrip('\n') if not line: brea..
문제 링크 https://www.acmicpc.net/problem/10809 10809번: 알파벳 찾기 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출 www.acmicpc.net 문제 문제 풀이 앞 번호 문제에서 조금만 변형시키면 되는 문제이다. for문을 리스트의 인덱스에 대해 돌도록 설정하고, 결과 리스트를 변형할 때 기존 리스트의 인덱스로 대입만 해주면 된다. s = input() slist = list(s) list = [-1 for i in range(26)] for i in range(len(slist)): index = ord(slist..
문제 링크 https://www.acmicpc.net/problem/10808 10808번: 알파벳 개수 단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다. www.acmicpc.net 문제 문제 풀이 알파벳 개수만큼 list를 만들고 입력받은 문자열에 대해 ord를 통해 정수로 변환해준 후 'a'를 0으로 나타내도록 97을 빼주어 인덱스를 계산했다. 알파벳이 나오면 해당 인덱스에 대한 값이 1씩 증가하도록 하였다. s = input() slist = list(s) list = [0 for i in range(26)] for i in slist: index = ord(i) - 97 list[index] += 1 for i in range(26): print(lis..
문제 링크 https://www.acmicpc.net/problem/10866 10866번: 덱 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 문제 문제 풀이 import sys input = sys.stdin.readline deque = [] n = int(input()) for i in range(n): command = input().split() if command[0] == 'push_front': deque.insert(0, command[1]) elif command[0] == 'push_back..
문제 링크 https://www.acmicpc.net/problem/10845 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 문제 문제 풀이 전에 풀이한 스택과 크게 다를 것이 없다. pop을 맨 뒤가 아닌 맨 앞의 정수로 연산해야하는 점만 조심하면 된다. import sys input = sys.stdin.readline queue = [] n = int(input()) for i in range(n): command = input().split() if command[0] == 'push'..
문제 링크 https://www.acmicpc.net/problem/10799 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net 문제 문제 풀이 문제 이해가 안되어서 조금 어려웠던 문제.. 스택으로 풀이하면 해결이 된다. 입력받은 문자열을 list로 저장하고 하나씩 검사하여 (가 나올 경우 스택에 그냥 append해준다. )가 나올 경우는 두 가지로, 조건문을 사용해 검사해준다. 1. 바로 앞에 (가 나올 경우 => 레이저이므로, 지금까지 스택에 저장된 (의 개수를 result에 더해준다. 2. 바로 앞에 )가 나올 경우 ..
문제 링크 https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 문제 문제 풀이 ( )은 무조건 쌍으로 나와야하므로, (가 등장하면 무조건 )로 마무리가 되어야 한다. 따라서 입력받은 문자열에 대해 list로 변환 후 한 문자씩 검사를 하여, (가 나타나면 sum에 1을 더하고, )가 나타나면 1을 빼주는 조건문을 실행한다. 이때, ( ) ) 와 같이 ( 의 개수보다 ) 의 개수가 많아질 경우, 조건을 충족시킬 수 없게..
문제 링크 https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 문제 문제 풀이 import sys input = sys.stdin.readline stack = [] n = int(input()) for i in range(n): command = input().split() if command[0] == 'push': stack.append(command[1]) elif command[0] == 'pop': if len(stac..
YOONJELLY
'알고리즘' 태그의 글 목록 (13 Page)