목록Programming (44)
정리
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/d3BEqH/btqHU7v4TeV/LkrLG8aVHkkSOxv0hqkwO1/img.png)
백준 2217번: 로프 - 입력받은 로프 값을 visit[로프 값] += 1 을 통해 저장합니다. - for문을 통해 계산을 합니다. - N = 2, 10과 15를 입력받을 때를 예로 들겠습니다. visit[10] = 1, visit[15] = 1입니다. for문을 통해 10000부터 1까지 돌겠습니다. i = 15 일 때, s = 1이고 이 때 들 수 있는 최대 무게는 i * s 입니다. max(answer, i *s) 로 들 수 있는 최대 무게를 구합니다. i = 10일 때, s = 2이고 이 때 들 수 있는 최대 무게 역시 i * s 입니다. max(answer, i * s) 를 통해 들 수 있는 최대 무게를 구해서 answer에 저장하면 됩니다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/eh2rx0/btqHK4tzpzA/FADRykkGE3AWIZA4AJbI70/img.png)
백준 3079번: 입국심사 - 이분탐색 알고리즘을 활용해야하는 문제입니다. - 이분탐색의 경계값은 left = 최단 시간 심사대, right = 최장 시간 심사대 * 인원수 입니다. - total 은 mid시간 동안 검사할 수 있는 총 사람의 수 입니다. total 은 mid시간 // 각 심사대의 소요 시간 의 총합을 구하면 됩니다. mid시간동안 M보다 더 많은 인원을 심사하는 것은 답이 될 수 있지만 M보다 적은 인원을 심사하는 것은 안되므로 total >= M 인 경우와 아닌 경우로 나누어 생각했습니다. - 파이썬 같은 경우에는 sys를 꼭 import하여 풀어야합니다. sys.stdin.readline()를 활용하여 입력값을 받아야지 시간초과에 안 걸립니다. N이 작을 때에는 문제가 없지만 100..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/pmC93/btqHMvKFlCf/a1sj4uId9UDjxuTvJJI2Tk/img.png)
Python 설치 방법(Windows) / 파이참, Pycharm 설치 방법 1. 파이썬을 다운 받습니다. - https://www.python.org/downloads/ 에 접속하여 노란색 버튼(Download Phthon)을 눌러 파이썬 가장 최근 버전을 다운 받습니다. Add Python 3.8 to PATH를 체크하고 Install Now를 진행합니다. 설치 과정이 완료되면 위와 같은 화면이 나오게 됩니다. Disable path length limit을 클릭합니다. 이상으로 파이썬 설치과정은 완료되었습니다. 파이썬 프로그램에는 이클립스, VS code, 파이참이 대표적입니다. 사용자가 편한 프로그램을 다운 받아서 사용하면 됩니다. 개인적으로 파이참이 가장 좋다고 생각하기에 파이참을 다운 받도록 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/nOqE7/btqHwgV5DW1/keXnFQMSdRA3AtRlk7ezuK/img.png)
백준 2839번: 설탕배달 - N보다 작은 가장 큰 5의 배수를 구합니다. 봉지의 최소 개수를 구해야 하므로 5킬로그램을 우선적으로 고려하기 위함입니다. - (N - 5킬로그램으로 담은 무게) 가 3의 배수라면 3킬로그램 봉지에 담아 총 봉지의 개수를 구하면 됩니다. - (N - 5킬로그램으로 담은 무게) 가 3의 배수가 아니라면 5킬로그램 봉지의 수를 하나 줄입니다. (N - 5킬로그램으로 담은 무게) 가 3의 배수가 될 때까지 이 과정을 반복합니다. - 5킬로그램 봉지가 0개 일 때에도 (N - 5킬로그램으로 담은 무게) 가 3의 배수가 아니라면 정확하게 N킬로그램을 만들 수 없는 경우이므로 -1을 출력합니다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/BDu4e/btqG9ROEbuK/P7d9t27SDzxj09WlIZ3APk/img.png)
백준 1931번: 회의실배정 - 최대한 많은 회의를 배정하기 위해서는 빨리 끝나는 회의를 우선배치해야 됩니다. - 왜 빨리 끝나는 회의 순서로 배치해야 되는지 증명을 여기서 하면 좋겠지만 이미 깔끔하게 설명한 유튜브 동영상이 있어서 첨부합니다. (강의실 배정 알고리즘 증명 유튜브 동영상) - Comparator 를 통해 회의가 빨리 끝나는 순서대로 정렬합니다. - 앞의 회의가 끝나는 시간보다 회의를 시작하려는 시간이 크거나 같으면 회의를 하고 ANSWER++ 를 합니다. 이 작업을 a[1]부터 a[N-1]까지 반복합니다. - 최소 한 개의 회의는 항상 할 수 있으므로 ANSWER은 1로 초기화합니다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/7JuEi/btqF7MnAwtw/QrDuBYoXJ8IB9kePla9Vl1/img.png)
백준 2212번: 센서 - 그리디 알고리즘과 정렬을 이용하는 문제입니다. - 예를 들어 N = 6, K = 2 일 경우, 좌표 3과 6에 센서를 설치하면 2 + 3 = 5로 최솟값이 됩니다. 5 = 0 + 1 + 2 + 2 입니다. 이를 일반화 해보면 다음과 같습니다. 센서의 좌표를 입력 받은 뒤, 오름차순으로 정렬합니다. 각 센서 간의 거리를 구합니다. 센서 간의 거리를 오름차순으로 정렬합니다. 0번 index부터 n-k-1번 index까지의 총합을 구합니다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bvRQJz/btqF3bBd1MF/rxATA2dMsDOCfe6PNwG841/img.png)
백준 1092번: 배 - 정렬과 그리디 알고리즘을 활용하는 문제입니다. 크레인의 무게를 저장한 Arraylist와 박스의 무게를 저장한 Arraylist를 내림차순으로 정렬합니다. craneList.get(0)이 boxList(0)보다 작으면 박스를 모든 박스를 옮길 수 없으므로 -1을 출력합니다. 이중 while문을 통해 밖의 while문은 boxList.size() == 0 이 될 때까지(박스가 더 이상 없을 경우)까지 반복합니다. 안에 있는 while문은 1분에 옮길 수 있는 박스의 수를 계산합니다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bTMZA5/btqFXJ5NfpP/c7fLXDqr2VNrfmeDxQPxz1/img.png)
백준 2512번: 예산 - 이분 탐색 알고리즘을 써야하는 문제입니다. 이분 탐색을 사용하지 않고 상한액을 선형 탐색하면 시간초과에 걸립니다. - 이분 탐색 알고리즘은 예산의 상한액을 찾을 때 사용됩니다. 입력 받은 예산 요청액들을 배열에 저장한 뒤 sort() 를 통해 오름차순으로 정렬합니다. 예산 상한액은 0부터 배열의 마지막 값(가장 큰 값) 사이를 이분 탐색하면서 찾습니다. 예산 상한액보다 작은 요청액은 그 값을 그대로 더하고 예산 상한액보다 큰 요청액들은 예산 상한액을 더합니다. 총합이 총 예산보다 작을 때를 찾아서 상한액을 반환해주면 됩니다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cIR8JB/btqFN2YLWJP/kZxMC3bMiVLqCjkM9IYuqK/img.png)
백준 10845번: 큐 - 자료구조 중 큐(queue)를 사용해서 푸는 문제입니다. - Java에서는 java.util.LinkedList 와 java.util.Queue 를 import 하면 라이브러리를 이용해서 쉽게 풀 수 있습니다. - 아래 코드에서 사용한 기능은 다음과 같습니다. add() : 큐에 데이터를 추가 isEmpty() : 큐가 비었는지 찼는지 확인 poll() : 큐에 가장 먼저 추가 된 데이터 출력 이후 큐에서 삭제 size() : 큐에 저장 된 데이터 수 출력 peek() : 큐에 가장 먼저 추가 된 데이터 출력