https://www.acmicpc.net/problem/10773문제문제풀이정수를 K번 입력받는다. K번 정수를 입력받는 동안 정수가 "0"일 경우에는 pop()을 이용해서 정수를 저장한 리스트의 가장 마지막 값을 지운다. 정수가 "0"이 아닌 경우에는 append()를 이용해서 정수를 저장한 리스트에 값을 추가한다.sum()을 이용해서 정수를 저장한 리스트에 있는 원소들의 합을 출력한다.소스코드K = int(input())nList = []for i in range(K): n = int(input()) if n == 0: nList.pop() else: nList.append(n)print(sum(nList))
Koala - 15기
https://www.acmicpc.net/problem/1463 문제풀이import sysdef cnt(N): if N 9를 입력하면 9 -> 3 -> 1 이 될것이다. 기존 값을 3 또는 2로 나누고 count 를 1씩 증가시키는 형태이다. 3의 배수이면 3 나머지 2의 배수이면 2로 나눈 나머지 값이 0임을 판단하여 배수임을 확인한다. 둘다 아닐경우 빼는 경우이다. 점화식을 세우면 dp[i] = 1 + dp[i // 3] 또는 dp[i] = 1 + dp[i // 2] 그리고 dp[i] = 1 + dp[i - 1] 가 될것이다. 3가지 경우로 구분하고 3또는 2로 나눌때 1을 뺀 값과 비교하여 어떤값이 최솟값인지 구분하여 저장한다. 3과 2의 공배수인 6의 경우 3으로 나눌때와 2로 나눌때 어..
https://www.acmicpc.net/problem/1912문제n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다. 예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다.입력첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.출력첫째 줄에 답을 출력한다.예제 입출력풀이수열을 순회하면서 이전까지의 최대합을 기록해두고 이를 통해 이번 위치에서..
문제 & 링크https://www.acmicpc.net/problem/11652 풀이!! 범위를 고려하여 long long int 자료형을 사용하여야 함 !! 1. map 자료구조를 사용하여 입력받을 카드의 숫자를 키, 해당 카드가 나온 횟수를 값으로 가지도록 한다. * map 자료구조의 특징으로는 키와 값을 쌍으로 가진다는 것, 레드-블랙 트리(균형 이진 트리)를 사용하여 키를 오름차순으로 정렬하여 관리한다는 것, 중복 키를 허용하지 않는다는 것 등이 있다.2. 입력받은 숫자를 map 자료구조에 삽입하고 해당 키와 쌍으로 이루어진 값을 1 증가시킨다.3. auto를 이용해서 map을 순회한 후, 최빈값을 찾아낸다.* auto는 변수의 타입을 자동으로 추론하여 선언할 수 있게 해주는 기능으로, 이 문..
문제 & 링크https://www.acmicpc.net/problem/1673 풀이!! 치킨 쿠폰과 도장을 잘 구분해야 함 !!도장 k개 -> 치킨 쿠폰 1개 -> 치킨 한 마리 주문 -> 도장 1 1. 몇 줄을 입력받을지 모르기에 EOF (End Of File) 조건을 이용하여 while문을 만들고 입력받는다. 입력을 종료하면 cin 객체의 상태가 false가 되며 반복문을 탈출한다.2. ans(정답), stamp(도장), coupon(쿠폰)을 각각 0, 0, n으로 초기화한다.3. 쿠폰의 개수만큼 정답 및 도장의 개수를 늘린다. (이때 쿠폰은 모두 사용)4. 도장을 k로 나누어 해당 몫 만큼 쿠폰을 생성하고, 나머지 개수를 저장한다.5. 3 - 4의 과정을 쿠폰이 0개가 될 때 까지 반복한다. 코드..
풀이패턴을 *를 기준으로 split해 문자열 a와 b로 쪼갠다.문자열 a와 파일 이름의 초반, 문자열 b와 파일 이름의 후반이 모두 일치하는지 인덱스를 통해 확인한다.파일 이름의 길이가 문자열 a의 길이 + 문자열 b의 길이 이상일 때만 일치하는지 확인하도록 하여 런타임 에러를 피한다. 코드
문제선영이의 집에는 콘센트를 꽂을 수 있는 플러그가 하나밖에 없다. 선영이는 많은 컴퓨터를 가지고 있는데, 컴퓨터의 전원 문제는 어떻게 해결하는 것일까?하나의 플러그가 있고, N개의 멀티탭이 있다. 각 멀티탭은 몇 개의 플러그로 이루어져 있다고 한다. 최대 몇 대의 컴퓨터를 전원에 연결할 수 있을까?https://www.acmicpc.net/problem/2010 입력첫째 줄에 멀티탭의 개수 N이 주어진다. (1 ≤ N ≤ 500,000) 이어서 둘째 줄부터 N개의 줄에 걸쳐 각 멀티탭이 몇 개의 플러그를 꽂을 수 있도록 되어 있는지를 나타내는 자연수가 주어진다. 이 자연수는 1,000을 넘지 않는다.출력첫째 줄에 최대로 전원에 연결될 수 있는 컴퓨터의 수를 출력한다.풀이 했던 방법'여러 입력을 받는 문..
https://www.acmicpc.net/problem/14405 문제길이가 5000이 넘지 않는 알파벳 소문자로 이루어진 문자열 S를 입력받고, S가 "pi", "ka", "chu"로만 이루어져 있는 경우 "YES", 그렇지 않은 경우 "NO"를 출력한다. 풀이문자열을 입력받고, 인덱스를 기준으로 2, 3개씩 문자열을 잘라서 비교하며 조건을 만족하는지 확인한다.#include #include using namespace std;string s, ans = "YES";int main() { cin >> s; int idx = 0; while (idx
https://www.acmicpc.net/problem/1038문제음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 출력하는 프로그램을 작성하시오. 0은 0번째 감소하는 수이고, 1은 1번째 감소하는 수이다. 만약 N번째 감소하는 수가 없다면 -1을 출력한다.입력첫째 줄에 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다. 출력첫째 줄에 N번째 감소하는 수를 출력한다.예제 입출력풀이문제 조건에 입이 1,000,000보다 작은 수임이 제시되었기 때문에 dfs를 이용해 감소하는 수를 모두 찾고 이를 정렬해 정답을 찾아내는 방식..
15652번: N과 M (4) (acmicpc.net)중복이 가능한 조합을 찾는 코드조합이므로 자신이 포함된, (그 앞은 포함되지 않은) 식의 구분을 지어줘야함# 중복 조합n, m = map(int, input().split())arr = [0 for i in range(m)]def recur(cur, start): if cur == m: print(*arr) return for i in range(start, n): arr[cur] = i+1 recur(cur+1, i) recur(0, 0)
https://www.acmicpc.net/problem/2839문제 풀이정확하게 나누어 떨어질 때, 3킬로그램의 갯수가 적을수록 더 적은 개수의 봉지를 가져갈 수 있다.최대의 3킬로그램으로 가져갈 때를 가정하여, max_pcs를 설정한다. (0개 일때도 고려하므로, +1)0부터 max_pcs까지, 3킬로그램 봉지의 갯수를 pcs로 설정하여 탐색한다.N킬로그램에서 pcs만큼의 3킬로그램 봉지를 가져간 나머지에 대해, 5킬로그램으로 나누어 떨어지면, 그 갯수와 pcs를 합한 값을 출력한다.has_answer의 플래그를 통해, 정확하게 N킬로그램을 만들 수 없는 상황에 대비한다.문제 코드N = int(input())has_answer = Falsemax_pcs = (N // 3) + 1for pcs in r..
https://www.acmicpc.net/problem/3003 문제 풀이 A, B, C, D, E, F의 총합은 16이며, A는 1, B는 1, C는 2, D는 2, E는 2, F는 8을 디폴트 값으로 잡겠습니다.킹(A), 퀸(B), 룩(C), 비숍(D), 나이트(E), 폰(F)의 값을 입력받습니다.그 후 각 디폴트 값을 입력 받은 값으로 빼내어 출력합니다.출력값으로 더하거나 빼야하는 피스의 개수를 확인할 수 있습니다.문제 코드A, B, C, D, E, F = map(int, input().split())print((1-A), (1-B), (2-C), (2-D), (2-E), (8-F))감사합니다.