www.acmicpc.net/problem/1758 1758번: 알바생 강호 첫째 줄에 스타박스 앞에 서 있는 사람의 수 N이 주어진다. N은 100,000보다 작은 자연수이다. 둘째 줄부터 총 N개의 줄에 각 사람이 주려고 하는 팁이 주어진다. 팁은 100,000보다 작거나 같은 자연수 www.acmicpc.net [풀이] 강호가 최대의 팁을 얻어야 하므로 입력받는 고객의 팁을 역순으로 정렬해서 풀면 된다. 또한 이후 강호가 받게 되는 팁이 음수가 된다면 아무것도 받지 않는 부분만 코드에 추가해 주면 된다. [코드] import sys input = sys.stdin.readline n = int(input()) arr = [int(input()) for _ in range(n)] arr.sort(re..
www.acmicpc.net/problem/14916 14916번: 거스름돈 첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다. www.acmicpc.net [풀이] 거스름돈 동전의 개수가 최소가 되려면 5로 나눈 몫과 5로 나눈 나머지를 2로 나눈 몫을 더하면 된다. 여기서 단순히 5로 나눈 몫을 최대로 하려면 2로 나누어지지 않은 경우가 생긴다 (예제의 13이 그 예가 된다.) 그러므로 입력받는 수가 5로 나누어지지 않는다면 2를 계속 빼서 5로 나누어지는 수로 만들면 된다. [코드] import sys input = sys.stdin.readline n = int(input()) count = 0 while True: if n % 5 == 0: count += (n // 5) p..
www.acmicpc.net/problem/11508 11508번: 2+1 세일 KSG 편의점에서는 과일우유, 드링킹요구르트 등의 유제품을 '2+1 세일'하는 행사를 하고 있습니다. KSG 편의점에서 유제품 3개를 한 번에 산다면 그중에서 가장 싼 것은 무료로 지불하고 나머지 두 www.acmicpc.net 처음에는 어떻게 할지 고민하다가 3으로 묶었을 때(나누었을 때) 나머지가 0,1,2인 경우를 나눠서 작성했는데 생각해보니 나머지가 2일 때만 제외하고 값을 더하면 될 것 같아 다시 작성하였다. 그리고 할인 되는 품목은 비싼 가격이면 좋으므로 내림차순으로 먼저 정렬을 하고 풀었다. (처음 코드는 경우를 다 구분해서 작성을 하여서 코드 길이가 너무 길었다.) import sys input = sys.st..
www.acmicpc.net/problem/10988 10988번: 팰린드롬인지 확인하기 첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다. www.acmicpc.net 문자를 반으로 나눠 중간까지만 비교를 하는 방법, 그리고 전체 비교를 하는 방법이 있는데 일단 나는 전체 비교를 하는 것으로 작성을 하였다. 비교 문자열을 만들고 비교 하였는데 간단한 문제라서 크게 고민할 문제는 아니었다. import sys input = sys.stdin.readline test = input().rstrip() test_compare = test[::-1] if test == test_compare: print(1) else: print(0)
www.acmicpc.net/problem/2231 2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 처음에 문제를 읽고 이게 무슨 말이지..? 분해합이 뭔지는 알겠는데 뭐가 뭐의 생성자..? 잠깐 이렇게 멍을 때렸는데.. 코드로 구현하는데는 어렵지 않았다. 가장 작은 생성자를 구하면 되므로 1부터 입력받는 n까지 for문으로 분해합 숫자를 확인하면 되는 문제였다. 그리고 생성자가 없을 경우에는 입력받은 숫자와 비교하여 0을 출력하면 된다. import sys input = sys...
www.acmicpc.net/problem/7795 7795번: 먹을 것인가 먹힐 것인가 심해에는 두 종류의 생명체 A와 B가 존재한다. A는 B를 먹는다. A는 자기보다 크기가 작은 먹이만 먹을 수 있다. 예를 들어, A의 크기가 {8, 1, 7, 3, 1}이고, B의 크기가 {3, 6, 1}인 경우에 A가 B를 먹을 www.acmicpc.net 단순하게 반복문을 통해 두 리스트를 비교하면 시간 초과가 생겨서 문제를 풀지 못한다. 따라서 이분 탐색을 활용하여 문제를 풀어야 한다. 이분 탐색을 하기전, 정렬을 한 뒤 이분탐색에 의하여 도출한 인덱스를 이용하여 답을 구하면 된다. 어차피 이분탐색에 의해 도출된 인덱스보다 작은 부분은 문제의 조건을 만족할 것이기에 따로 신경을 쓰지 않아도 된다. import..