728x90

코딩 48

[백준] 9375 - 패션왕 신해빈

https://www.acmicpc.net/problem/9375 9375번: 패션왕 신해빈 첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다. www.acmicpc.net 조합을 활용할 수 있어야 한다. 머리에 모자하나만 얹어놔도 된다. 각 옷의 type마다 입지 않았을 경우도 있다는 것을 고려하면 해결할 수 있다. 마지막에는 다 벗었을 경우를 결과에서 차감하였다. 더보기 testCase = int(input()) for tc in range(testCase): N = in..

[백준] 5086 - 배수와 약수

https://www.acmicpc.net/problem/5086 5086번: 배수와 약수 각 테스트 케이스마다 첫 번째 숫자가 두 번째 숫자의 약수라면 factor를, 배수라면 multiple을, 둘 다 아니라면 neither를 출력한다. www.acmicpc.net 간단한 판별 문제이다. 더보기 import sys input = sys.stdin.readline ''' 첫 번째 숫자가 두 번째 숫자의 약수라면 factor 배수라면 multiple 둘 다 아니라면 neither ''' answerList = [ 'factor', 'multiple', 'neither'] while(True): testCase = list(map(int, str(input()).split())) if 0 == testCa..

[백준] 3036 - 링

https://www.acmicpc.net/problem/3036 3036번: 링 출력은 총 N-1줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다. www.acmicpc.net 비례식을 활용하면 풀 수 있는 문제이다. 최대공약수를 구하기 위해 유클리드 호제법 또한 사용해야한다. (기약분수로 결과를 출력하기 위해) 더보기 def gcd(a, b): maxVal = a if a >= b else b minVal = a if a < b else b while 0 != minVal: temp = maxVal % minVal maxVal = minVal minVal = temp return maxVal N = i..

[백준] 1676 - 팩토리얼 0의 개수

https://www.acmicpc.net/problem/1676 1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net 오래전에 2와 5의 약수 개수를 이용해 C로 풀었다. 이번엔 파이썬으로 다른 방식을 활용해 풀었다. C++ 더보기 #include #include #include #include #include #include #include #include #include #include #define MINSIZE 1 #define MAXSIZE 1 using namespace std; int main() { int N; scanf("%d", &N); //10의 개수로 결정됨 //(1,2,5,1..

[백준] 1037 - 약수

https://www.acmicpc.net/problem/1037 1037번: 약수 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되 www.acmicpc.net 주어지는 약수에 대해 최소값 * 최대값을 하면 정답이 나온다. 한 가지 의문은 max(), min()을 따로 구하는 것보다 for 한 번에 maxVal = ?, minValue = ? 을 삼항으로 구하는게 빠를줄 알았는데 아니었다. 더보기 N = int(input()) Nlist = list(map(int, str(input()).split())) st = str(Nlist) maxValu..

[백준] 1010 - 다리놓기

https://www.acmicpc.net/problem/1010 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net 실제적으로 DP를 활용할 수 있는 능력이 필요하다. 그 외에는 수학 공식만 알고있다면 풀 수 있다. 더보기 import sys input = sys.stdin.readline T = int(input()) dpDict = {} for tdx in range(T): N, M = list(map(int, str(input()).split())) if(N == M): print(1) else: # r!..

[백준] 1931 - 회의실 배정

https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 회의실의 정렬을 어떻게 해야되는지 처음에 이해하지 못 했었다. 처음에는 끝나는 시간 - 시작 시간으로 cost를 구해서 정렬하였다. 하지만, '빨리 끝날 수록 뒤에서 고려해 볼 기회가 많다' 라는 힌트를 구글링을 통해 찾았고, 끝나는 시간이 같으면 시작 시간을 기준으로 정렬하도록 하였다. 더보기 import sys input = sys.stdin.readline # input N = int(input()) startEndList = [] for ndx in range(N): startEnd = list(map(i..

[백준] 13305 - 주유소

https://www.acmicpc.net/problem/13305 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 그리디 알고리즘을 활용할 수 있다면 간단히 해결할 수 있는 문제이다. 현재 도시와 다음 도시들의 cost를 확인하며 loop를 이용해 계산한다. 더보기 N = int(input()) distList = list(map(int, str(input()).split())) costList = list(map(int, str(input()).split())) distIdx = 0 cityI..

[백준] 1541 - 잃어버린 괄호

https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 최소값을 구해야 한다는 것에 초점을 맞추면 풀 수 있다. 내가 구현한 코드는 남들보다 코드 길이는 길었지만 (C++만 사용하던 사람이라는 변명...) 속도는 64ms로 조금 빠른 편이다. 더보기 inputData = list(input()) parsedList = [] number = '' for data in inputData: if '-' != data and '+' != data: nu..

[백준] 11047 - 동전 0

https://www.acmicpc.net/problem/11047 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 그냥 for문으로 loop를 순회하면 시간 초과가 발생한다. 따라서 몫을 구해 계산한다. 더보기 nk = list(map(int, str(input()).split())) N = nk[0] K = nk[1] costList = [] for idx in range(N): cost = int(input()) if(cost

반응형