Algorithm 41

프로그래머스 기능개발 파이썬

https://programmers.co.kr/learn/courses/30/lessons/42586 코딩테스트 연습 - 기능개발 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 programmers.co.kr 처음엔 아래와 같이 풀었다 def solution(progresses, speeds): answer = [] temp = 0 while progresses: if progresses[0] >= 100: del progresses[0] del speeds[0] temp += 1 else: if temp > 0: answer.append(temp) temp ..

프로그래머스 단속카메라 파이썬**

https://programmers.co.kr/learn/courses/30/lessons/42884 코딩테스트 연습 - 단속카메라 [[-20,-15], [-14,-5], [-18,-13], [-5,-3]] 2 programmers.co.kr 이 문제의 가장 탐욕스러운 방법은 진출지점 기준으로 오름차순으로 정렬한 후, 진출지점에 카메라를 설치하는 것이다. 왜냐하면 진출지점이 오름차순 정렬돼있기 때문에 첫번째 진출지점에 카메라를 설치하면 다음 자동차는 무조건 첫번째 진출지점 이후에 진출하기 때문에 카메라를 만나기에 가장 최선이다. 풀이: 1. 진출지점 기준으로 오름차순 정렬한다. 2. 자동차를 순회한다. 3. 만약 카메라가 현재 자동차의 시작지점 이전에 있다면 그 차는 카메라를 만나지 못한 것이므로 카메라..

프로그래머스 섬 연결하기 파이썬

https://programmers.co.kr/learn/courses/30/lessons/42861 코딩테스트 연습 - 섬 연결하기 4 [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] 4 programmers.co.kr 크루스칼 알고리즘을 이용하면 쉽고 빠르게 풀 수 있는 문제이다. 이 문제를 처음 접했을 때는 크루스칼 알고리즘을 모르고 있었다. 크루스칼 알고리즘을 모르는채로 대강 계획을 잡고 풀어보려했는데 생각보다 구현이 잘 안돼서 질문/답변 을 확인하다가 크루스칼 알고리즘을 알게 되었다. import heapq def get_parent(c, node): if c[node] == node: return node return get_parent(c, c[node]) def ..

프로그래머스 구명보트 파이썬

https://programmers.co.kr/learn/courses/30/lessons/42885 코딩테스트 연습 - 구명보트 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5 programmers.co.kr 이전에 풀었던 큰수만들기 를 약간은 무식하게 풀고나서 다른사람의 풀이를 보고 뭔가 느낀바가 있다. 뭐라고 말로 표현하기 어려운데 굳이 표현하자면 컴퓨터공학도 처럼 생각하자 는 것이다. 이번 문제를 풀 때 그런 생각으로 임했고 아래와 같이 깔끔하게 풀었다. 만족스러운 깔끔한 코드다. 물론 문제자체도 무척 쉬웠다. 이 문제를 풀기 위해서 ..

프로그래머스 큰 수 만들기 파이썬

https://programmers.co.kr/learn/courses/30/lessons/42883 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr def solution(number, k): answer = [] number = list(map(int, number)) start = 0 ans_len = len(number) - k remain = ans_len - len(answer) end = len(number) - remain + 1 while len(answer) < len(number) - k: max_val = -1 temp_s = start temp_e = end remain = ans_len - len(answer) # print((start, end)) # prin..

프로그래머스 체육복 파이썬

https://programmers.co.kr/learn/courses/30/lessons/42862 코딩테스트 연습 - 체육복 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번 programmers.co.kr 쉽게 풀었으나 너저분한 코드가 많다. 훨씬 많이 줄일 수 있을듯. 풀이: 1. 전체 학생수 에서 체육복을 잃어버린 학생을 뺀 값을 임시로 수업할 수 있는 학생수로 정함 2. 1부터 전체 학생 수 만큼 학생 배열 생성 3. 체육복을 잃어버림과 동시에 여분을 갖고 있는 학생은 그냥 아무일도 일어나지 않은 학생이므로 체육복을 잃어버린 학생, 여분을 갖고있는 학생에서 빼..

프로그래머스 카펫 파이썬

https://programmers.co.kr/learn/courses/30/lessons/42842 코딩테스트 연습 - 카펫 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 programmers.co.kr 쉽게 풀었지만 코드가 많이 너저분하다. 효율성은 나쁘진 않다. O(N) 1. 갈색과 노란색 카펫수가 제공됐을때 전체 카펫은 갈색+노란색 이고 조합할 수 있는 모든 가로x세로 를 구하기 위해 약수를 구한다. 2. 약수 리스트가 하나 밖에 없다면 정답은 (약수1 x 약수1) 이다. 3. 약수 리스트가 두개면 크기에 따라 (약수1 x 약수2) 또는 (약수2 x 약..

프로그래머스 소수 찾기 파이썬

https://programmers.co.kr/learn/courses/30/lessons/42839 코딩테스트 연습 - 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 programmers.co.kr 크게 어려운 문제는 아니였던듯 한데,, 내가 푼 방법이 효율적이라고는 말하지 못하겠다. 내 풀이는 아래와 같다. 1. 숫자의 길이만큼 루프를 돌린다. 2. 예를들어 1234 면 1자리로 나올수 있는 조합부터 4자리로 나올수 있는 모든 조합을 itertools 의 permutations 를 통해서 구한다. 3. 가능한 모든 조합을 순회하면서 소수여부..

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

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..