본문 바로가기

Programming207

[프로그래머스] 셔틀버스 (Python) https://programmers.co.kr/learn/courses/30/lessons/17678 코딩테스트 연습 - [1차] 셔틀버스 10 60 45 ["23:59","23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59"] "18:00" programmers.co.kr 나의 풀이 그다지 잘 푼 느낌이 아니다. 그냥 알고리즘 짜고 그대로 구현하긴 했다. 더 깔끔하게 풀 수 있을 것 같은데 아직 많이 부족하다ㅠ 알고리즘 순서는 1. 셔틀버스 도착 시간 순서로 dict 초기화하고 2. 정렬된 timetable을 바탕으로 도.. 2021. 10. 30.
[프로그래머스] 베스트앨범 (Python) https://programmers.co.kr/learn/courses/30/lessons/42579 코딩테스트 연습 - 베스트앨범 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 programmers.co.kr 충분히 풀 수는 있지만 뭔가 코드가 효율적이지 않은 것 같은 느낌이 드는 풀이였다. 시간 복잡도는 O(N)이라 나쁘지 않을 수도? 1. 장르별로 값을 dict에 초기화해주고, 판매수는 큰 순으로, 같을 때 고유 번호는 작은 순으로 정렬한다. 2. 각 장르별로 총판매수를 구하고, 총판매수가 큰 순으로 장르를 정렬한다. 3. 판매수가 큰 장르부터 두 개씩 뽑아서 .. 2021. 10. 29.
[프로그래머스] 위장 (Python) https://programmers.co.kr/learn/courses/30/lessons/42578 코딩테스트 연습 - 위장 programmers.co.kr 각 옷의 종류에 따라 dict를 초기화하고, 그 옷의 조합인 (N+1)*(M+1) -1 하면 된다. (-1은 모든 옷 종류 꺼내지 않았을 경우는 인정되지 않으므로 하나 빼 주는 것) 나의 풀이 from collections import defaultdict def solution(clothes): answer = 1 cloth_dict = defaultdict(list) for cloth in clothes: cloth_dict[cloth[1]].append(cloth[0]) for cloth in cloth_dict.values(): answer.. 2021. 10. 29.
[프로그래머스] 소수 찾기 (Python) https://programmers.co.kr/learn/courses/30/lessons/42839 코딩테스트 연습 - 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 programmers.co.kr itertools의 permutations와 에라토스테네스의 체를 활용해서 문제를 풀었다. 나의 코드 from itertools import permutations def solution(numbers): def prime_list(n): # 에라토스테네스의 체 초기화: n개 요소에 True 설정(소수로 간주) sieve = [True] * n m.. 2021. 10. 29.
[프로그래머스] H-Index (Python) https://programmers.co.kr/learn/courses/30/lessons/42747 코딩테스트 연습 - H-Index H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표 programmers.co.kr 주어진 조건대로 구현하면 된다. 나의 코드 def solution(citations): citations.sort(reverse=True) answer = len(citations) -1 if citations[-1] >= answer+1: return answer+1 while answer > 0: if citations[ans.. 2021. 10. 29.
[프로그래머스] 단속카메라 (Python) https://programmers.co.kr/learn/courses/30/lessons/42884 코딩테스트 연습 - 단속카메라 [[-20,-15], [-14,-5], [-18,-13], [-5,-3]] 2 programmers.co.kr 그렇게 어렵지 않았던 문제였다. 자동차를 정렬하고 카메라 범위를 좁혀가면 풀렸다. 나의 풀이 def solution(routes): answer = 1 check = [-30001,30001] routes.sort() for route in routes: print(check,route) if check[0] 2021. 10. 28.
[프로그래머스] 섬 연결하기(Python) 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 두세 시간 걸려서 풀었던 문제다. 알고리즘을 어떻게 짜야할지 오래 고민했다 내가 짠 알고리즘을 아래 기준으로 설명하겠다. cost = [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] n = 4로 주어졌을 때 일단 각 섬의 정보를 모아놓는 리스트 안에 python set을 통해 각 set에 현재 연결된 섬의 정보를 담는다. island = [set() for _ in range(n)] 다음으로 섬 연결 비용 기준으로 정렬한다. cost.. 2021. 10. 28.
[프로그래머스] 구명보트 (Python) https://programmers.co.kr/learn/courses/30/lessons/42885 코딩테스트 연습 - 구명보트 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5 programmers.co.kr 사람의 무게를 정렬하고 가장 무거운 사람과 가장 가벼운 사람의 무게를 더해서 limit를 넘지 않으면 answer를 추가시키는 방식으로 코드를 작성했다. def solution(people, limit): people.sort(reverse=True) right = len(people)-1 answer = 0 for i in range.. 2021. 10. 27.
[프로그래머스] 큰 수 만들기(Python) https://programmers.co.kr/learn/courses/30/lessons/42883 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr 이것저것 여러 풀이 방식으로 풀었다. 나머지 테스트는 모두 통과했지만 10번에서 시간 초과가 났다 def solution(number, k): result = len(number)-k index = 0 answer = '' while k>0 and len(answer)!=result: max_index = number[index:index+k+1].find(max(number[index:index+k+1])) answer+=number[index:index+k+1][max_index] k-=max_index index += max_inde.. 2021. 10. 27.
[프로그래머스] 조이스틱(Python) https://programmers.co.kr/learn/courses/30/lessons/42860 코딩테스트 연습 - 조이스틱 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다 programmers.co.kr 이 문제에서 구현해야 하는 로직은 두 가지다 1. 현재 커서의 알파벳에 따라 이동해야 하는 최소 커서 횟수 계산 2. 현 위치에서 커서를 왼쪽 오른쪽 중 어디로 이동해야 최소 커서 이동인지 계산 알파벳의 총개수는 25개이므로, 위의 12개 까지는 조이스틱을 아래로 아래 12개 까지는 조이스틱을 위로(거꾸로) 이동하면 된다. 'A'의 아스키 코.. 2021. 10. 26.
#6 Python 코딩테스트 다이나믹 프로그래밍(DP) https://www.youtube.com/watch?v=5Lu34WIx2Us&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=6 이 포스팅은 위의 영상을 보고 제가 필요하다고 생각된 부분을 정리한 포스팅입니다. 다이나믹 프로그래밍 메모리를 적절히 사용하여 수행 시간 효율성을 비약적으로 향상시키는 방법. 이미 계산된 결과(작은 문제)는 별도의 메모리 영역에 저장하여 다시 계산하지 않음 구현은 Top - Down , Bottom - Up 동적 계획법이라고도 부름 문제가 다음의 조건을 만족할 때 사용 할 수 있음. 1. 최적 부분 구조 (Optimal Substructure) - 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아서 큰 문제를 해결할 수 있다. 2.. 2021. 10. 23.
[프로그래머스] 괄호 변환(Python) https://programmers.co.kr/learn/courses/30/lessons/60058 코딩테스트 연습 - 괄호 변환 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 programmers.co.kr 주어진 조건대로 구현하면 되는 문제다. 살짝 까다롭긴 했지만 풀만 했던 것 같다. 나의 코드 def check_correct(p): stack = [] for i in p: if i =='(': stack.append(i) elif len(stack) ==0: return False else: stack.pop() return True def split_brack.. 2021. 10. 23.
[프로그래머스] 짝지어 제거하기(Python) https://programmers.co.kr/learn/courses/30/lessons/12973 코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙 programmers.co.kr 스택 자료구조를 사용해서 O(N)으로 풀 수 있다. 나의 코드 def solution(s): stack = [] for i in s: if len(stack) == 0: stack.append(i) elif stack[-1] == i: stack.pop() else: stack.append(i) return 0 if stack else 1 2021. 10. 23.
[프로그래머스] 오픈채팅방(Python) https://programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 나의 코드 def solution(record): user = dict() answer= [] for i in record: info = i.split() if info[0] =='Enter' or info[0]=='Change': user[info[1]]=info[2] for i in record: info = i.split() if info[0] =='Ent.. 2021. 10. 22.
[프로그래머스] 부족한 금액 계산하기(Python) https://programmers.co.kr/learn/courses/30/lessons/82612 코딩테스트 연습 - 1주차_부족한 금액 계산하기 새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이 programmers.co.kr 등차수열의 합을 공식으로 쓰면 됨 def solution(price, money, count): return max(0,price*(count+1)*count//2-money) 2021. 10. 21.