프로그래밍 198

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

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

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

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