본문 바로가기

알고리즘/정렬13

[Python] 백준 1213 팰린드롬 만들기 🧑‍💻 [Python] 백준 1213 팰린드롬 만들기 Silver 3 - Dictionary 딕셔너리에, 각 알파벳과 알파벳의 개수를 넣는다 key는 알파벳 | value에는 알파벳의 개수 알파벳 개수 중 홀수가 2개 이상이면, 팰린드롬을 만들 수 없다 if sum([al % 2 for al in al_dict.values()]) > 1: 홀수 이면 al % 2 를 할 때 1이 나온다 반대로 짝수면 0이다 즉 팰린드롬이 되려면, 모든 알파벳의 개수가 짝수거나, 개수 하나가 홀 수 일 때에 팰린드롬을 만들 수 있다 for key, value in sorted(al_dict.items()): 을 통해서, 알파벳을 정렬한다 코드 flag = True al_dict = {} alp = input() for a .. 2023. 4. 1.
[Python] 백준 13904 - 과제 🧑‍💻 [Python] 백준 13904 - 과제 Gold 5 - 정렬 과제 마감일과, 과제 점수가 주어진다 하루에 한 과제를 끝낼 수 있다 즉 과제 점수 기준으로 내림차순으로 해서, 최대한 많은 점수를 얻으려고 한다 문제풀이 과제 관련 정보를 입력 받는다 그리고 일수가 있는 리스트를 만든다 이 리스트는, 어느 날에 과제를 완료했는지 확인하는 리스트다 즉 False가 있고, True로 그 날 과제를 완료했다고 표시한다 그리고 과제들을 과제 점수가 높은 과제 기준으로 내림차순으로 정렬을 한다 for문을 사용하여 과제들을 순회한다 여기서 과제를 끝내야 하는 날이 제일 기준 index가 된다 만약에 과제를 끝내야 하는 날이 False일 경우, True로 바꿔주고 answer에 과제 점수를 누적시켜준다 과제를 끝.. 2023. 1. 15.
[Python] 백준 1374 - 강의실 🧑‍💻 [Python] 백준 1374 - 강의실 Gold 5 - 정렬, Heap 최대한 적은 수의 강의실을 사용하여, 모든 강의를 진행해야 한다 문제풀이 시간 초과 강의 시간들을 강의 시작 시간 기준으로 오름차순으로 정렬했다 그리고 강의가 끝나는 시간 기준으로 다시 오름차순으로 정렬을 했다 그리고 while문을 돌면서, 강의들을 뺐다 여기서 하고 싶었던 것은 강의실 당 들어가는 강의 시간들을 구하는 것이었다 그렇게 되면 한 강의실에 대한 스케줄이 나오고, 강의 시간이 아직도 남아있으면, 다시 while문을 반복해야 한다 반복하는 것을 강의 시간이 아예 없을 때까지 진행을 하는 것이다 Heap으로 풀기 위에는 한 강의실에 대한 스케줄을 강의 시간이 다 없어질 때까지 짜는 것이었다 Heap으로 풀게 되면 강.. 2023. 1. 14.
[Python] 백준 1931 - 회의실 배정 🧑‍💻 백준 1931 - 회의실 배정 Silver 1 - 정렬 회의실 한 개가 있다 입력값으로 회의 시작 시간과, 회의 끝나는 시간이 주어진다 시작 시간과, 끝나는 시간은 같을 수 있지만, 회의끼리 겹치면 안 된다 즉 시작하는 시간 순으로 먼저 정렬을 한 후, 또 한번 회의가 끝나는 순서로 정렬을 하면 된다 제일 중요한 것은 회의가 일찍 끝날수록, 더 많은 회의를 회의실에서 할 수 있다 문제 풀이 회의가 시작하는 시간 기준으로 정렬을 한다 그리고 회의가 끝나는 시간 기준으로 정렬을 한다 결과적으로 회의가 끝나는 시간 기준으로 정렬이 되어 있다 정렬된 회의 중 첫 회의는 무조건 진행을 한다 for문을 돌면서 전 회의의 끝나는 시간과 현재 회의의 시작 시간이 같거나 더 클 때에, meeting_now 를 갱.. 2023. 1. 13.
[Python] 백준 2437 저울 🧑‍💻 백준 2437 저울 Gold 2 주어진 저울 추의 무게들을 오름차순으로 정렬을 한다 그 저울 추들을 가지고 1부터 몇 번까지 무게를 측정할 수 있는지 구하는 것이다 예를 들어 주어진 저울 추들로 1부터 20까지 무게를 측정할 수 있다. 그러면 답은 21이다. (21부터는 무게를 측정하기 어려우니깐) 문제 풀이 먼저 주어진 리스트를 오름차순으로 정렬을 한다 target을 주어야 하는데, target은 1부터 시작한다. 위에 예시처럼 1부터 20까지 무게를 측정할 수 있지만, 21부터는 측정하기 어려우니 20 + 1을 해야 해서 target을 1로 저장을 한다 그리고 weight리스트를 순회를 한다 여기서 target보다 순회하는 저울추가 더 크면 for문을 끝낸다 target보다 순회하는 저울추가 .. 2023. 1. 11.
[Python] 백준 6068 시간 관리하기 🧑‍💻 [Python] 백준 6068 시간 관리하기 Gold 5 - 정렬 하루는 0 시간부터 시작한다 농부가 주어진 일을 끝내기 위해, 얼마나 더 잘 수 있는지 시간을 구하는 것이다 하루를 시작하는 시간을 구하는 것이기 때문에, 시작하는 시간 기준으로 문제를 해결하면 된다 문제 풀이 입력을 받을 때, 일을 끝내기 위해 필요한 시간과, 일을 끝내야 하는 시간이 주어진다 여기서 일을 끝내야 하는 시간 기준으로 오름차순으로 정렬을 한다 hour 같은 경우, 하루를 시작하는 기준이 0 이니깐, 0부터 시작을 한다 while문을 통해, 일을 끝내야 하는 시간 안에 모든 일들을 할 수 있으면 1씩 더해준다 time에 일을 끝내기 위해 필요한 시간을 계속 더해준다 만약 여기서 time 이 일을 끝내야 하는 시간보다 .. 2023. 1. 9.
[Python] 백준 1946 신입 사원 🧑‍💻 [Python] 백준 1946 신입 사원 Silver 1 - 정렬 서류 성적과 면접 성적 중 적어도 하나가 다른 지원자보다 떨어지지 않으면 선발을 한다 즉 서류 성적, 면접 성적 모두, 다른 지원자보다 낮으면 떨어지는 것이다 문제 풀이 먼저 서류 성적 기준으로 정렬을 한다 그리고 면접 성적들을 비교를 한다 제일 처음 기준을 서류 면접에서 1등 한 사람 기준으로 간다 서류 면접 1등 사람 기준(A)으로 면접 성적이 더 우수하다면, 그 사람도 (B) 신입 사원으로 뽑힐 수 있다 그 다음부터는 B의 면접 성적 기준으로 비교를 한다. (이렇게 계속 면접 성적 기준을 바꿔주면서 비교를 하며 뽑힐 수 있는 신입 사원의 수를 구한다) 정렬한 기준, 제일 앞에 있는 사람은 무조건 신입사원으로 뽑힌다. 서류가 1.. 2023. 1. 9.
[Python] 백준 1202 보석 도둑 🧑‍💻 백준 1202 보석 도둑 Gold 2 - 정렬, heapq 각 보석들의 무게와 가치가 주어지면서, 각 가방에 들어갈 수 있는 보석의 최대 무게가 주어진다 각 가방에는 보석 하나 밖에 못 들어간다 즉, 가방에 들어갈 수 있는 보석들 중, 최대의 보석 가치를 가방에 넣는 것이다 문제 풀이 가방에 들어갈 수 있는 보석들 중, 최대의 보석 가치를 가방에 넣는 것 즉 보석들을 각 보석들의 무게 위주로 오름차순으로 정렬을 한다 그리고 가방에 들어갈 수 있는 보석들을 구한다 그 가방에 들어갈 수 있는 보석들 중, 제일 가치가 높은 보석을 가방에 넣으면 된다 heapq 힙은 이진 트리를 사용하면서 우선순위 큐를 구해준다. O(logN) 코드 결과 코드 import heapq N, K = map(int, inpu.. 2023. 1. 6.
[Python] 백준 1253 - 좋다 🧑‍💻 백준 1253 - 좋다 Gold 4 - 정렬 리스트 안에 있는 어떤 수를, 리스트 안에 있는 두 수의 합으로 나타낼 수 있는 수의 개수를 구하는 것이다 여기서 놓치지 말아야 할 것은, 숫자의 값이 같아도 위치가 다르면 다른 숫자로 간주한다 예시) 원래 그냥 리스트를 정렬을 한 후, 투 포인터를 이용해서 더해서, 더한 숫자가 리스트에 있는지 확인만 하면 되는 줄 알았다 그렇게 되면, 다른 위치에 있어도, 같은 값의 숫자가 카운팅이 잘 안 될 수 있다 그래서 숫자 하나하나 씩 빼고, 그 외의 숫자들을 투 포인터를 사용해서 그 뺐던 숫자와 일치하는지 더해주면 된다 문제 풀이 위 각 변수들의 설명 i : for문을 통해서 정렬된 리스트에 있는 값들을 가지고 온다 (range를 가지고 오면 됨) temp .. 2023. 1. 5.