Today Sangmin Learned
article thumbnail
[Python] BOJ(백준) 2217번 - 로프 (+ sys.stdin.readline의 중요성)
CS/알고리즘 2021. 6. 28. 19:27

링크 https://www.acmicpc.net/problem/2217 난이도(solved.ac 참고) 실버3 풀이 문제 풀이 방법은, 그냥 내림차순으로 나열한 다음에 a_list[인덱스] * (인덱스+1)의 최댓값을 구하면 끝난다. a_list[인덱스]는, 예제의 경우 내림차순하면 15 10 이 되는데, 각 로프에 모두 고르게 중량이 걸리게 되므로 15를 선택한다면 15만큼만 들 수 있고, 10을 선택한다면 (10 * 2) = 20만큼 들 수 있다. 이 생각을 토대로, a_list[인덱스]의 값은 작아지고 인덱스는 커지는 상황에서 결국 들 수 있는 값인 a_list[인덱스] * (인덱스 + 1)의 최댓값을 구한 것이다. (여기서 인덱스+1을 해 준 이유는, 인덱스는 0부터 시작하기 때문이다.) 사실 어..

[Python] BOJ(백준) 11399번- ATM
CS/알고리즘 2021. 6. 27. 11:36

링크 https://www.acmicpc.net/problem/11399 난이도(solved.ac 참고) 실버3 풀이 이 문제는 처음에 봤을 때부터 어떻게 풀어야 할 지 바로 머릿속에 떠올랐다. 가장 시간이 적게 들게 하려면, 걸리는 시간을 sort하여 가장 작은 값이 맨 앞에 오도록 해야 한다. 그래야 오래 걸릴수록 뒤로 가서, 전체 시간(돈 뽑는 시간 + 대기시간)을 줄일 수 있기 때문이다. 우선 배열 m을 sort했고, 각 사람들의 소요시간 process_time, 전체 소요시간 total_process_time을 각각 배열, 숫자 로 선언했다. 첫 번째 사람은, 기다리는 시간이 없기 때문에 돈을 뽑는 시간 m[0]만 더해주고, 이는 전체 소요시간(total_process_time)에도 해당한다. ..

[Python] BOJ 1439번 - 뒤집기
CS/알고리즘 2021. 5. 19. 14:32

문제 기술 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 것이다. 뒤집는 것은 1을 0으로, 0을 1로 바꾸는 것을 의미한다. 예를 들어 S=0001100 일 때, 전체를 뒤집으면 1110011이 된다. 4번째 문자부터 5번째 문자까지 뒤집으면 1111111이 되어서 2번 만에 모두 같은 숫자로 만들 수 있다. 하지만, 처음부터 4번째 문자부터 5번째 문자까지 문자를 뒤집으면 한 번에 0000000이 되어서 1번 만에 모두 같은 숫자로 만들 수 있다. 문자열 S가 주어졌을 때, 다솜이가 해야하는 행동의 최소 횟수를 출력하시오. 입력 첫째 줄에 문..