문제 https://www.acmicpc.net/problem/4673 4673번: 셀프 넘버 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, www.acmicpc.net 코드 arr = [False for i in range(0,10001)] for i in range(1, 10001): sum = 0 n = i while (1): if n == 0: break; a = n % 10 sum = sum + a n = int(n/10) result = sum + i if(i == result): break eli..
Problem Solving/CT-Python
문제 https://www.acmicpc.net/problem/1026 1026번: 보물 첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거 www.acmicpc.net 문제에서 A배열과 B배열의 값들을 곱해서 최솟값을 구하고자 한다. 가장 작은 수를 뽑아내려면? 최대값 X 최솟값 + 최대값 X 최솟값 + .... + 최대값 X 최솟값 이렇게 반복하면 된다. 즉 배열 하나는 오름차순 나머지 배열 하나는 내림차순하여 같은 인덱스마다 값들을 곱하면 구하고자 하는 가장작은S값을 얻을 수 있다. 문제를 살펴보면 "단, B에 있는 수는 재배열하면 안 된다." ..
문제 https://www.acmicpc.net/problem/11000 11000번: 강의실 배정 첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109) www.acmicpc.net 한 3~4시간 고민하고도 도저히 답이 안나와서 힌트를 얻었다. https://www.youtube.com/watch?v=7noZLdfHIMQ&t=918s&ab_channel=Chan-SuShin 다음과 같이 알고리즘을 작성하였다. 각 강의의 시작시간, 끝나는 시간을 배열에 입력한다. 강의의 시간이 입력되어 있는 배열을 시작시간 순으로 오름차순 정렬한다. 가장 빠르게 시작하는 강의 끝나는 시간을 힙에 넣는다. (힙=강의실) 배열의 두번째 강..
문제 https://www.acmicpc.net/problem/2217 2217번: 로프 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하 www.acmicpc.net 문제 접근 및 테스트 케이스 더보기 로프를 병렬로 연결하면 각 로프에 w/k의 중량이 동일하게 지탱함 최대로 지탱할 수 있는 중량 = 가장 작은 로프가 지탱하는 무게 X 병렬로 연결된 로프의 수 각 로프마다 지탱할 수 있는 무게를 리스트로 입력받아 정렬함 ex) [3, 10, 10, 6] =>[10, 10, 6, 3] 로프가 한개씩 추가되어 지탱한다고 생각하자 [10X1, 10X2,..
문제 https://www.acmicpc.net/problem/10610 10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한 www.acmicpc.net 내가 푼 코드 a = list(input()) a.sort(reverse=True) sum = 0 for i in a: sum+=int(i) if sum % 3 !=0 or "0" not in a: print(-1) else: print("".join(a))
문제 https://programmers.co.kr/learn/courses/30/lessons/42587 코딩테스트 연습 - 프린터 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린 programmers.co.kr 내가 푼 코드 def solution(priorities, location): localist = [i for i in range(0, len(priorities))] count = 0 while priorities: maximum = max(priorities) poppriorities = priorities.pop(0) if poppriorities < m..
하루정도 고민하고 힌트를 얻어서 푼 문제.. 문제 https://programmers.co.kr/learn/courses/30/lessons/42583 코딩테스트 연습 - 다리를 지나는 트럭 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 programmers.co.kr 본인 작성 답안 (비 효율적 list사용) def solution(bridge_length, weight, truck_weights): current_BT = [0] * bridge_length current_BW = 0 answer = 0 while len(current_BT): an..
문제 https://programmers.co.kr/learn/courses/30/lessons/12921 코딩테스트 연습 - 소수 찾기 1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 조건 n은 2이상 programmers.co.kr import math def solution(n): arr = [True for i in range(n+1)] for i in range(2,int(math.sqrt(n))+1): if arr[i] == True: j = 2 while i * j
문제 https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 1158.py person, num = map(int,input().split()) entire_list = [] result = [] popNum = 0 for i in range(person): entire_list.append(i+1) while len(entire_list) > 0 : popNum = (popNum + (num-1)) % len(entire_list) popElement = entire_list.pop(popNum) result.append(str(popEle..
문제 https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 10828.py import sys command_count = int(sys.stdin.readline()) count = 0 stack_area = list() while count != command_count: count += 1 command_comment = sys.stdin.readline().split() if command_comment[0] == 'pop'..