Today Sangmin Learned
[알고리즘] 입국심사에서 각 입국 심사자의 평균 대기 시간 구하기(심사대 2개)
CS/알고리즘 2021. 4. 20. 17:15

문제 프로그래머스 level3 입국심사 문제를 변형한 문제이다. 공항에서 사람들의 입국을 심사하는 심사대가 k(k = 1 혹은 2)개있다. 사람들이 입국심사를 받기 위하여, 심사대 바로 앞에서 한 줄로 서서 기다린다. k개의 심사대 중 하나가 비어있으면(심사받는 사람이 없으면), 먼저 도착한 사람이 비어 있는 이 심사대에서 심사를 받는다. 입국심사를 받기 위한 각 사람의 심사대 앞에 도착하는 시간과 심사받는데 걸리는 시간이 주어진다. 각 사람이 심사대 앞에 도착한 시간에 대한 정보는, 바로 이전 사람이 심사대 앞에 도착한 시간과의 차이(분)로 주어진다. 각 사람이 심사를 받기 위하여 기다리는 시간 (심사시간은 제외)의 평균을 소수점 이하 1자리까지 (소수점 이하 2째 자리에서 반올림) 출력하는 프로그램을..

[알고리즘] 계단 오르기
CS/알고리즘 2021. 4. 10. 14:11

문제 기술 n(1이상 20이하 정수)개 계단을 바닥에서 위로 올라가려고 한다. 계단을 올라갈 때 한 번에 1개, 3개 혹은 4개의 계단만 오를 수 있다. 바닥에서 가장 위의 계단으로 올라갈 때, 올라가는 방법의 수를 구하는 프로그램을 작성하시오. 입력 형식 첫 번째 줄에 양의 정수 n이 주어진다. 출력 바닥에서 가장 위의 계단으로 올라가는 방법의 수를 출력한다. 입력 예 및 출력 예 8 // 25 나의 코드 import sys n = int(sys.stdin.readline()) def dpstair(n): C = [0 for i in range(n+1)] C[0] = C[1] = C[2] = 1 C[3] = 2 for i in range(4, n+1): C[i] = C[i-1] + C[i-3] + C[..

[알고리즘] 입국심사에서 각 입국 심사자의 평균 대기 시간 구하기 완료
CS/알고리즘 2021. 4. 1. 21:40

문제 프로그래머스 level3 입국심사 문제를 변형한 문제이다. 공항에서 사람들의 입국을 심사하는 심사대가 k(k = 1 혹은 2)개있다. 사람들이 입국심사를 받기 위하여, 심사대 바로 앞에서 한 줄로 서서 기다린다. k개의 심사대 중 하나가 비어있으면(심사받는 사람이 없으면), 먼저 도착한 사람이 비어 있는 이 심사대에서 심사를 받는다. 입국심사를 받기 위한 각 사람의 심사대 앞에 도착하는 시간과 심사받는데 걸리는 시간이 주어진다. 각 사람이 심사대 앞에 도착한 시간에 대한 정보는, 바로 이전 사람이 심사대 앞에 도착한 시간과의 차이(분)로 주어진다. 각 사람이 심사를 받기 위하여 기다리는 시간 (심사시간은 제외)의 평균을 소수점 이하 1자리까지 (소수점 이하 2째 자리에서 반올림) 출력하는 프로그램을..

[알고리즘] 입국심사에서 각 입국 심사자의 평균 대기 시간 구하기(미완)
CS/알고리즘 2021. 3. 31. 20:45

문제 프로그래머스 level3 입국심사 문제를 변형한 문제이다. 공항에서 사람들의 입국을 심사하는 심사대가 k(k = 1 혹은 2)개있다. 사람들이 입국심사를 받기 위하여, 심사대 바로 앞에서 한 줄로 서서 기다린다. k개의 심사대 중 하나가 비어있으면(심사받는 사람이 없으면), 먼저 도착한 사람이 비어 있는 이 심사대에서 심사를 받는다. 입국심사를 받기 위한 각 사람의 심사대 앞에 도착하는 시간과 심사받는데 걸리는 시간이 주어진다. 각 사람이 심사대 앞에 도착한 시간에 대한 정보는, 바로 이전 사람이 심사대 앞에 도착한 시간과의 차이(분)로 주어진다. 각 사람이 심사를 받기 위하여 기다리는 시간 (심사시간은 제외)의 평균을 소수점 이하 1자리까지 (소수점 이하 2째 자리에서 반올림) 출력하는 프로그램을..

[알고리즘] K와 가장 가까운 수 구하기
CS/알고리즘 2021. 3. 29. 16:01

문제 오름차순으로 정렬된 n(2이상 100,000이하 정수)개의 정수(1,000,000,000이하 양의 정수) 중 K(양의 정수)와 가장 가까운 정수를 찾는 프로그램을 작성하시오. K와 가장 가까운 정수가 여러 개일 경우, 이들 중 작은 수를 출력하시오. 요구 조건: 이진 탐색(binary search)을 이용해야 한다. 입력 예시 1 5 // n 20 30 40 55 60 // n개의 정수 36 // K 출력 예시 1 40 입력 예시 2 13 20 30 40 55 60 70 75 80 85 90 91 93 100 92 출력 예시 2 92 나의 풀이 n = int(input()) num_list = list(map(int, input().split())) K = int(input()) def binary..

[알고리즘] 고속 거듭제곱
CS/알고리즘 2021. 3. 29. 15:46

문제 양의 정수 M, e, n, d에 대하여 C = M^e mod n을 구하시오. (mod는 나머지를 구하는 연산이다). 그리고 위의 C에 대하여 C^d mod n을 구하시오. 단, 양의 정수 a, k, n에 대하여 ak mod n을 구하는 방법은 다음을 이용한다. a^k mod n = a mod n if k = 1 = (a^2/k mod n)^2 mod n if k가 짝수 = (a*(a^k-1 mod n)) mod n if k가 홀수 입력 예시 15 3 7 33 // M e d n 출력 예시 9 15 나의 풀이 처음에 그냥 쉽게 생각했다. 거듭제곱을 구하는 함수 작성(재귀함수를 이용) 문제의 조건을 그대로 mod 함수로 만들어서 mod한 값을 다시 mod 함수에 넣어서 print하기 이렇게 생각하여 d..

[알고리즘] 총 한 번 매수/매도 시 최대 이익
CS/알고리즘 2021. 3. 20. 22:52

문제 주식 투자를 즐기는 홍길동은 n일 동안 어떤 회사의 주식을 다음과 같이 매매한다: 주식 한 주를 한 번만 사서 이를 다음에 한 번 팔 수 있다. 홍길동은 n일 동안 주식 매매(한번 사서 한번 팜)를 하여 얻은 이익에 대하여, 얻을 수 있는 최대 이익과 얼마나 차이가 있는지를 알고 싶어한다. 그래서 이 기간동안 얻을 수 있는 최대 이익을 계산하기로 하였다. 예를 들어, 7일 동안 주식 가격이 (30, 25, 50, 10, 20, 40)과 같을 때, 최대 이익은 네째 날 주식을 사서 마지막 날 팔면 이익이 30(=40–10)이다. n일 동안 주식 가격이 주어질 때, 얻을 수 있는 최대 이익을 구하는 프로그램을 작성하시오. 입력 형식 첫째 줄에는 n이 주어진다. n은 2 이상 100,000 이하의 정수이..

[알고리즘] 최대 수익 알고리즘
CS/알고리즘 2021. 3. 17. 14:53

어제에 이어 오늘도 지금까지 계속 알고리즘만 풀었고.. 일단 이 문제를 풂으로써 3문제 중 2문제를 제대로 끝냈다. 마지막 한 문제는, 전에 풀었으나 12개의 테스트 케이스 중 10개나 타임아웃 / 런타임 에러가 떴고.. 그래서 다시풀어봐야한다.. 하지만 시간이 좀 있으니 오늘은 드디어 다른 공부를 할 수 있게 됐다. 하 행복하다.. 문제 주식 투자를 즐기는 홍길동은 어떤 회사의 주식을 다음과 같은 패턴으로 매일 주식 거래를 한다: (1) 주식 한 주를 사든지, (2) 이미 샀던 주식 중 일부를 파든지, 혹은 (3) 매매를 하지 않는다. 홍길동은 어떤 기간 동안 주식 매매를 하여 얻은 이익에 대하여, 얻을 수 있는 최대 이익과 얼마나 차이가 있는지를 알고 싶어한다. 그래서, 이 기간 동안 얻을 수 있는 ..

[알고리즘] 연속으로 증가하는 횟수의 최대값 구하기
CS/알고리즘 2021. 3. 16. 16:47

문제 n일 동안의 주식 지수가 날짜 순서대로 주어져 있다. 연속하여 지수가 상승한 날 수의 최대값을 구하는 프로그램을 작성하시오. 예를 들어 15개의 주식 지수가 (26, 22, 10, 25, 27, 29, 45, 23, 24, 25, 40, 26, 37, 13, 24)라면 연속으로 지수가 상승한 날 수의 최대값은 4((10, 25, 27, 29, 45)의 길이 -1)이다. 입력 형식 첫째 줄에는 n이 주어진다. n은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 주식 지수(양의 정수)가 날짜 순서대로 n개 주어진다. 출력 형식 연속하여 지수가 오른 날 수의 최대값을 첫 번째 줄에 출력한다. 작성 코드 a = int(input()) b = list(map(int, input().split())) ..

[알고리즘] 동적 계획법(Dynamic Programming)
CS/알고리즘 2021. 3. 16. 11:49

Algorithm - DP(Dynamic Programming) 동적 계획법 Dynamic Programming의 조건은 두 가지가 있다.이는 바로 최적 부분 구조(Optimal Substructure), 중복되는 부분 문제(Overlapping Subproblems)이다. 최적 부분 구조 최적 부분 구조가 있다는 것은 -> 부분 문제들의 최적의 답을 이용해서 기존 문제의 최적의 답을 구할 수 있다는 것을 의미한다. fib(5)를 구하려면, fib(4)와 fib(3)을 구하는 부분 문제를 먼저 해결해야 한다. 이 점에서, 피보나치는 최적 부분 구조를 갖고 있다. 중복되는 부분 문제 재귀 함수 -> 부분문제 를 봤었음. fib(5)를 해결하기 위해 fib(4)와 fib(3)이라는 부분문제를, fib(4)를..