썸네일 BAEKJOON #1417) 국회의원 선거 (python) 알고리즘 분류: 구현, 그리디, 시뮬레이션 1417번: 국회의원 선거 첫째 줄에 후보의 수 N이 주어진다. 둘째 줄부터 차례대로 기호 1번을 찍으려고 하는 사람의 수, 기호 2번을 찍으려고 하는 수, 이렇게 총 N개의 줄에 걸쳐 입력이 들어온다. N은 1,000보다 작거나 www.acmicpc.net 💡풀이 n = int(input()) votes = [] cnt = 0 for _ in range(n): votes.append(int(input())) while votes.index(max(votes)) != 0: votes[votes.index(max(votes))] -= 1 votes[0] += 1 cnt += 1 for i in range(1, n): if votes[0] == votes[i]: v..
썸네일 BAEKJOON #1449) 수리공 항승 (python) 알고리즘 분류: 그리디 1449번: 수리공 항승 첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나 www.acmicpc.net 💡 풀이 n, l = map(int, input().split()) loc = list(map(int, input().split())) loc.sort() cnt = 1 tmp = loc[0] for i in range(n-1): if loc[i+1]
썸네일 BAEKJOON #1448) 삼각형 만들기 (python) https://www.acmicpc.net/problem/1448 1448번: 삼각형 만들기 첫째 줄에 빨대의 개수 N이 주어진다. N은 3보다 크거나 같고, 1,000,000보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 빨대의 길이가 한 줄에 하나씩 주어진다. 빨대의 길이는 1,000,000보다 www.acmicpc.net 알고리즘 분류: 그리디 💡 풀이 import sys n = int(input()) list = [] answer = -1 for _ in range(n): list.append(int(sys.stdin.readline())) list.sort(reverse=True) for i in range(n-2): if list[i] < list[i+1] + list[i+2]: ans..
썸네일 BAEKJOON #1439) 뒤집기 (python) https://www.acmicpc.net/problem/1439 1439번: 뒤집기 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모 www.acmicpc.net 알고리즘 분류: 그리디 알고리즘 💡코드 + 풀이 #1 s = list(input()) cnt0 = 0 cnt1 = 0 if s[0] == '0': cnt0 += 1 else: cnt1 += 1 for i in range(len(s)-1): if s[i] != s[i+1]: if s[i]=='0': cnt1 += 1 else: cnt0 += 1 else: continue print(min(cnt0,..
썸네일 BAEKJOON #11047) 동전 0 (python) 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 💡풀이 n, k = map(int, input().split()) coins = [] cnt = 0 for _ in range(n): coins.append(int(input())) coins.reverse() for i in range(n): if k // coins[i] >= 1: cnt += (k // coins[i]) k %= coins[i] else: continue print(cnt) 입력..
썸네일 BAEKJOON #11399) ATM (python) https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 예제 입력 예제 출력 5 3 1 4 3 2 32 n = int(input()) time_list = list(map(int, input().split())) time_list.sort() answer = 0 for i in range(1, n+1): for j in range(i): answer += time_list[j] print(answer) 이 문제는 문제 길이에 비해서 너무 간단하다. 최소 인출 시간을 보장하기 위해서..
썸네일 BAEKJOON #2839) 설탕 배달 (python) https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 예제 입력 예제 출력 18 4 4 -1 6 2 9 3 11 3 ((처음에는 생각했던 풀이는, 최대한 적은 봉지를 가져가려면 5kg로 최대한 많이 가져가야 하므로, 5kg로 나눌 수 있을 때까지 나누고 3kg로 나눠야 한다고 생각했다. 그래서, 5로 나누고 그 나머지를 다시 3으로 나눈다. 이때, 나누어 떨어지면 바로 나눈 횟수를 출력하고, 나누어 떨어지지 않으면 n에서 5를 빼고 다시 과정을 반복한다. ))..
썸네일 BAEKJOON #1966) 프린터 큐 문제 유형: 큐, 구현, 그리디 이 문제 풀이의 핵심 아이디어는 다음과 같다. 1. 현재 리스트에서 가장 큰 수가 앞에 올 때까지 회전시킨 뒤에 꺼낸다. 2. 이때, 꺼낸다는 것은 프린트를 했다는 뜻이므로, 프린트한 횟수의 카운트를 늘린다. 3. 가장 큰 수가 내가 알고 싶은 문서에 해당하면서 가장 앞에 있을 때 프린트 횟수를 출력하며 프로그램을 종료한다. #제출코드 test_case = int(input()) for _ in range(test_case): n, m = list(map(int, input().split())) queue = list(map(int, input().split())) queue = [(i, idx) for idx, i in enumerate(queue)] count = 0 ..
썸네일 BAEKJOON #1874) 스택수열 문제 유형: 스택, 그리디 이 문제는 문제에서 요구하는대로 구현만 해도 풀 수 있다...는데,,, 나는 1시간 잡아도 못 풀어서 결국 나동빈 강사님의 해설 강의를 보고 풀었다..,,ㅎㅠㅠㅠㅠㅠ 어려워어려워어려워 그대로 구현하라는데 그게 어려워,,,ㅠㅠㅠㅠ 공부 진짜 많이 해야할듯쿄쿄 문제 풀이 핵심 아이디어는 다음과 같다. 1. 스택에 원소를 삽입할 때는 단순히 특정 수에 도달할 때까지 삽입(push)한다. 2. 스택에서 원소를 연달아 빼낼 때, 내림차순을 유지할 수 있는 확인한다. #코드 n = int(input()) count = 1 stack = [] result =[] for i in range(1, n+1): data = int(input()) while count
썸네일 BAEKJOON #2798) 블랙잭 문제 유형: 배열, 완전 탐색 1. 카드 3개의 조합으로 나올 수 있는 합의 값들을 모두 구한다. (완전 탐색) 2. 구한 합의 값들을 정렬한다. 3. M을 넘지 않는 최대값을 구한다. n, m = map(int, input().split()) cards = list(map(int, input().split())) sum_list = [] answer = 0 for i in range(n-2): for j in range(i+1, n-1): for k in range(j+1, n): sum_list.append(cards[i] + cards[j] + cards[k]) sum_list.sort() for i in sum_list: if i > m: break answer = i print(answer)
썸네일 BAEKJOON #2920) 음계 # 내 풀이 num = list(map(int, input().split())) result = [] for i in range(len(num)-1): if num[i]+1 == num[i+1]: result.append("ascending") elif num[i]-1 == num[i+1]: result.append("descending") else: result.append("mixed") if "mixed" in result: print("mixed") elif "ascending" in result: print("ascending") else: print("descending") # 풀이 num = list(map(int, input().split())) ascending = True descend..