Contents 1. 문제 정의 및 예제 해석 (문제 링크: https://www.acmicpc.net/problem/12904 ) 12904번: A와 B 수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수 www.acmicpc.net B : 문자열 S ABBA : 문자열 T 아래와 같은 2가지 규칙을 지키며, 문자열 S를 문자열 T로 바꿀 수 있으면 1을, 바꿀 수 없으면 0을 출력하는 문제입니다. 문자열의 뒤에 A를 추가한다. 문자열을 뒤집고 뒤에 B를 추가한다. 첫 번째 예제에 대해 B가 ABBA가 되는 과정을 살펴보겠습니..
Contents 1. 문제 정의 및 예제 해석 (문제 링크: https://www.acmicpc.net/problem/12919 ) 12919번: A와 B 2 수빈이는 A와 B로만 이루어진 영어 단어 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수빈 www.acmicpc.net B : 문자열 S BABA : 문자열 T 아래와 같은 2가지 규칙을 지키며, 문자열 S를 문자열 T로 바꿀 수 있으면 1을, 바꿀 수 없으면 0을 출력하는 문제입니다. 문자열의 뒤에 A를 추가한다. 문자열의 뒤에 B를 추가하고 문자열을 뒤집는다. 첫 번째 예제에 대해 다음과 같은 과정을 거치면..
Contents 1. 문제 정의 및 예제 해석 (문제 링크: https://www.acmicpc.net/problem/1912) 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 10 : 수의 개수 10 -4 3 1 5 6 -35 12 21 -1 : 수의 개수만큼 수를 나열(띄어쓰기로 수를 구분) 수의 나열에 대해, 숫자를 연속으로 더할 때, 나올 수 있는 최댓값을 출력합니다. 2. 전체 코드 input() # n은 쓰지 않으니 그냥 input만 받기 s=[*map(int,input().split())] # 수열을 리스트..
Contents 1. 문제 정의 및 예제 해석 (문제 링크: https://www.acmicpc.net/problem/1463) 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 주어진 수 x에 대해, 아래 3가지 연산을 통해 1을 만듭니다. 이때, 연산을 사용하는 횟수의 최솟값을 출력합니다. X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 예제 입력 2번의 10을 보면, 10 -> 9 -> 3 -> 1로, 3번 연산이 최솟값입니다. 2. DP - BottomUp 풀이(for문 사용) x=int(input()) # 수 입력받기 d=[0]*(x+1) # 1-based for..
Contents 1. 문제 정의 및 예제 해석 (문제 링크: https://www.acmicpc.net/problem/2579) 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 6 : 아래 주어질 계단의 개수 10 : 첫 번째 계단의 점수 20 : 두 번째 계단의 점수 .. 20 : 마지막(6번째) 계단의 점수 이제 아래 3가지 규칙에 따라 계단을 오를 때, 최대 점수를 출력해야 합니다. 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음다음 계단으로 오를 수 ..
* 전체 코드 ### 정수 1개 입력받기 N = int(input()) ### 한줄 정수 리스트 입력받기 li = [*map(int,input().split())] ### 여러개 정수 입력받기 a,b,c = map(int,input().split()) ### 여러 줄의 정수 리스트 입력받기 n = int(input()) li = [int(input()) for _ in range(n)] ## n 없이 한 줄로 li = [int(input()) for _ in range(int(input()))] ### N행 배열 입력받기 #### 숫자인 경우 N=int(input()) # N개의 행 arr=[[*map(int,input().split())] for _ in range(N)] #### 문자열인 경우 N=i..
Contents 1. 문제 정의 및 예제 해석 (문제 링크: https://www.acmicpc.net/problem/2156) 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규 www.acmicpc.net 처음에 포도주 개수(n)가 주어지고, 다음에 n 줄에 걸쳐 각 포도주 잔에 들어있는 포도주의 양이 주어진다. 6 : 포도주 개수(n) 6 : 첫 번째 포도주 잔의 포도주 양 ... 1 : 마지막 포도주 잔의 포도주 양 입력받은 포도주 잔의 포도주양을 리스트로 만들면 [6, 10, 13, 9, 8, 1]와 같습니다. 이제 연속으로 3잔 선..
Contents 1. 문제 정의 및 예제 해석 (문제 링크: https://www.acmicpc.net/problem/2294) 2294번: 동전 2 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 가치가 같은 동전이 여러 번 주 www.acmicpc.net 동전 종류 개수(n)와 만들어야 하는 금액(k)이 주어지고, 다음 n개의 줄에 걸쳐, 각각 동전의 가치가 주어집니다. k원을 만들기 위해 사용되는 최소 동전 개수를 출력해야 합니다.(불가능한 경우 -1, 각 동전은 몇 개라도 사용 가능) 3 15 : 동전 종류는 3개, 목표 금액은 15 1 : 첫 번째 동..
Contents 1. 문제 정의 및 예제 해석 (문제 링크: https://www.acmicpc.net/problem/2606) 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 주어진 컴퓨터에 대해, 1번 컴퓨터와 연결된 컴퓨터가 총 몇 개인지 출력하는 문제입니다. 예제를 보겠습니다. 7 : 총 컴퓨터의 대수입니다. 6 : 컴퓨터 간에 연결된 선의 개수입니다. 1 2 : 1번 컴퓨터와 2번 컴퓨터가 연결되었다는 의미입니다. 2 3 ... 4 7 -> 입력을 바탕으로 컴퓨터 간의 연결을 시각화하면 아래와 같습니다. ..
Contents 1. 문제 정의 및 예제 해석 (문제 링크: https://www.acmicpc.net/problem/14248) 14248번: 점프 점프 첫 번째 줄에는 돌다리의 돌 개수 n이 주어진다.(1≤n≤100,000) 돌의 번호는 왼쪽부터 1번에서 n번이다. 다음 줄에는 그 위치에서 점프할 수 있는 거리 Ai가 주어진다.(1≤Ai≤100,000) 다음 줄에는 출 www.acmicpc.net 예제를 보겠습니다. 5 : 돌이 5개 있는 경우, 1 4 2 2 1 : 각 돌다리 별로 움직일 수 있는 칸의 개수가 주어집니다. 3 : 출발점이 3번째 있는 돌입니다. 방문 가능한 돌들을 살펴보겠습니다. 1 4 2 2 1 중 빨간 색칠된 곳에서 시작합니다. 처음에 왼쪽으로 2칸 가서 1에 도착한 뒤, 오른쪽..
Contents * 일반 풀이와 숏코딩 풀이 2개 ## 일반 풀이 sik_minus = input().split('-') # 55-50+40 => [55, 50+40] sik_plus = [] #[55, 90] for i in sik_minus: count = 0 i = i.split('+') #[55], [50,40] for j in i: count += int(j) # 1. 55 2. 50+40 sik_plus.append(count) result = sik_plus[0] for i in range(1, len(sik_plus)): result -= sik_plus[i] print(result) # -35 ##숏코딩1 sik_minus = input().split('-') sik_plus = list..
Contents * 일반 풀이와 숏코딩 풀이 ## 일반 풀이 T = int(input()) ## 테스트케이스 for _ in range(T): brk_list=list(input()) ## 괄호 리스트 pair_check=0 for brk in brk_list: if brk == '(': pair_check+=1 elif brk ==')': pair_check-=1 if pair_check 0: print("NO") elif pair_check==0: print("YES") ## 숏코딩 풀이 for _ in range(int(input())): b=input() while '()' in b: b=b.replace('()','') pri..