알고리즘 54

프로그래머스 모의고사 파이썬

https://programmers.co.kr/learn/courses/30/lessons/42840 코딩테스트 연습 - 모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 programmers.co.kr 이 문제는 오랜만에 쉬운 문제였다. 무척 쉽다고 느껴서 급하게 후다닥 풀고 제출했는데 서너번 실패가 떠서 조금 당황하기도 했으나 금방 통과했다. 풀이과정: 1. 수포자1, 수포자2, 수포자3 이 찍는 패턴이 모두 다르므로 (정확히는 횟수가 다르므로) 모든 수포자의 찍는 횟수를 동일하게 맞춰주기 위해 최소 공통 배수인 40으로 맞춰주었다. 2. 답안을 순회하면서 ..

프로그래머스 H-Index 파이썬

https://programmers.co.kr/learn/courses/30/lessons/42747 코딩테스트 연습 - H-Index H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표 programmers.co.kr 첫번째 풀이 O(N^2) def solution(citations): answer = 0 citations.sort(reverse=True) citation_count = [0] * (citations[0] + 1) for i in citations: for j in range(0, i): citation_count[j] += 1..

프로그래머스 가장 큰 수 파이썬

https://programmers.co.kr/learn/courses/30/lessons/42746 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 이문제는 정말이지.. ㅎㅎㅎ 그다지 어렵지 않은 인상을 주며 나를 아주 큰 곤경에 빠트린 문제다. 5시간 넘게 고민하다가 결국엔 풀어내지 못했다. 처음엔 그냥 배열 원소를 string 으로 변환한 후, string 정렬하면 끝 아니야?? 라고 생각했다. 이렇게 풀면 배열로 [3, 30, 34, 5,..

프로그래머스 이중우선순위큐

https://programmers.co.kr/learn/courses/30/lessons/42628 코딩테스트 연습 - 이중우선순위큐 programmers.co.kr 글쎄.. 이문제는 무지 쉬웠다. 뭐 고민할게 있나.. 하고 5분만에 풀고 제출하니 통과했다. 그냥 우선순위큐는 기본적으로 최소힙이니까 최소값을 꺼낼때는 heappop 으로 최대값을 꺼낼땐 pop 으로. 최종적으로 남은 값이 있으면 answer 에 맥스, 민으로 값을 넣어주면 끝이다.. 이게 왜 레벨 3이지?? import heapq from collections import deque def solution(operations): answer = [0, 0] d = deque(operations) h = [] while d: operati..

프로그래머스 디스크 컨트롤러

https://programmers.co.kr/learn/courses/30/lessons/42627 코딩테스트 연습 - 디스크 컨트롤러 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를 programmers.co.kr 음... 난 이런 류의 문제에 약한걸까.. 진정한 뇌정지가 와서 아예 모르겠었다.. 어떻게든 다른분의 풀이를 참고하지 않고 풀어보려고 했으나 한번 막힌 머리는 돌아갈줄을 몰랐다.. 이런 문제를 한번씩 접할때마다 좌절스럽다 그래도 어쨌든.. 풀이를 보고 어떻게 해야하는지 이해하였다. 앞으로 이런 유형의 문제를 또 만났을 때 풀어낼 수 있도록 확실히 이해하고 ..

프로그래머스 베스트앨범 파이썬

https://programmers.co.kr/learn/courses/30/lessons/42579 코딩테스트 연습 - 베스트앨범 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 programmers.co.kr def solution(genres, plays): answer = [] dic = {} for i in range(len(genres)): genre = genres[i] if genre not in dic: dic[genre] = [plays[i], (plays[i], i)] else: dic[genre][0] += plays[i] dic[genre].ap..

백준 14464 파이썬***

더보기 https://www.acmicpc.net/problem/14464 14464번: 소가 길을 건너간 이유 4 첫 줄에 C와 N이 주어진다. 다음 C줄에는 T1…TC가 주어지고, 그 다음 N줄에는 Aj와 Bj(Aj ≤ Bj)가 주어진다. A, B, T는 모두 최대 1,000,000,000인 음이 아닌 정수이고, 같을 수도 있다. www.acmicpc.net import sys C, N = map(int, sys.stdin.readline().rstrip().split()) chickens = [int(sys.stdin.readline().rstrip()) for _ in range(C)] chickens = sorted(chickens) cows = [list(map(int, sys.stdin.re..

백준 14464 파이썬

https://www.acmicpc.net/problem/14464 14464번: 소가 길을 건너간 이유 4 첫 줄에 C와 N이 주어진다. 다음 C줄에는 T1…TC가 주어지고, 그 다음 N줄에는 Aj와 Bj(Aj ≤ Bj)가 주어진다. A, B, T는 모두 최대 1,000,000,000인 음이 아닌 정수이고, 같을 수도 있다. www.acmicpc.net import sys import heapq C, N = map(int, sys.stdin.readline().rstrip().split()) chickens = [] for _ in range(C): heapq.heappush(chickens, int(sys.stdin.readline())) cows = [] for _ in range(N): s, e ..

백준 14698 파이썬

https://www.acmicpc.net/problem/14698 14698번: 전생했더니 슬라임 연구자였던 건에 대하여 (Hard) 각 테스트 케이스마다 슬라임을 끝까지 합성했을 때 청구될 비용의 최솟값을 1, 000, 000, 007로 나눈 나머지를 출력한다. 전기 에너지가 전혀 필요하지 않은 경우엔 1 을 출력한다. www.acmicpc.net import sys import heapq T = int(sys.stdin.readline()) for _ in range(T): N = int(sys.stdin.readline()) energies = list(map(int, sys.stdin.readline().rstrip().split())) heapq.heapify(energies) if len(e..

백준 2012 파이썬**

https://www.acmicpc.net/problem/2012 2012번: 등수 매기기 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에 걸쳐 각 사람의 예상 등수가 순서대로 주어진다. 예상 등수는 500,000 이하의 자연수이다. www.acmicpc.net import sys N = int(sys.stdin.readline()) R = [] for _ in range(N): R.append(int(sys.stdin.readline())) R.sort() ans = 0 for i in range(1, N + 1): ans += abs(i - R[i - 1]) print(ans) 간단하게 생각하면 될 문제인데, 첫단추를 잘못끼워서 그런지 많이 헤맸다. 1. 받..