프로그래머스 67

[Python/프로그래머스]오픈채팅방

https://programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 코드 : def solution(record): answer = [] userDB = {} actions = [] for event in record : info = event.split() action,userid = info[0],info[1] if action in ("Enter", "Change") : nickname = info[2] userDB[use..

[Python/프로그래머스]문자열 압축

https://programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문 programmers.co.kr 새롭게 알게된것 : 문자열에서 범위를 넘어서는 슬라이싱을 해도 에러가 안난다. 그저 있는 만큼 잘 잘릴 뿐 for문이 len(s)+i까지인 이유는 끝까지 압축이 가능할 경우 b에 추가가 안되고 cnt만 올라가기 때문에 +i를 해주어 현재 있는 cnt와 tmp를 b에 추가하기 위해서이다. 코드 : def solution(s): result=[] # 한글자 ..

[Python/프로그래머스]신규아이디추천_구현

https://programmers.co.kr/learn/courses/30/lessons/72410 코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 programmers.co.kr 이것이 바로 구현..! 문제에 나와있는 조건들 그대로 다 구현하면 된다. 풀다보면 재밌다. 코드 : def solution(new_id): answer = '' # 1 new_id = new_id.lower() # 2 for c in new_id : if c.isalpha() or c.isdigit() or c in ['-','_','.'] : answe..

[Python/프로그래머스]신고 결과 받기

https://programmers.co.kr/learn/courses/30/lessons/92334 코딩테스트 연습 - 신고 결과 받기 문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 programmers.co.kr 코드 : (defaultdict 사용) from collections import defaultdict def solution(id_list, report, k): answer = [] # 중복 신고 제거 report = list(set(report)) user = defaultdict(set) cnt = defaultdict(int) for r in r..

[Python/프로그래머스]순위_그래프

https://programmers.co.kr/learn/courses/30/lessons/49191 코딩테스트 연습 - 순위 5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2 programmers.co.kr 코드 : from collections import defaultdict def solution(n, results): answer = 0 win_graph = defaultdict(set) # 이긴 선수 lose_graph = defaultdict(set) # 진 선수 for winner, loser in results : win_graph[loser].add(winner) lose_graph[winner].add(loser) for i in range(1,n+1) ..

[Python/프로그래머스] 소수 찾기_완탐

https://programmers.co.kr/learn/courses/30/lessons/42839 코딩테스트 연습 - 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 programmers.co.kr 코드 : from itertools import permutations # 소수 판별 def is_prime_number(x) : if x

[Python/프로그래머스]모의고사_완탐

https://programmers.co.kr/learn/courses/30/lessons/42840 코딩테스트 연습 - 모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 programmers.co.kr 코드 : def solution(answers): answer = [] supo1 = [1,2,3,4,5] supo2 = [2,1,2,3,2,4,2,5] supo3 = [3,3,1,1,2,2,4,4,5,5] cnt = [0,0,0] for i in range(len(answers)) : if answers[i] == supo1[i%5] : cnt[0] +=1 i..

[Python/프로그래머스]단속 카메라_Greedy(그리디)

https://programmers.co.kr/learn/courses/30/lessons/42884 코딩테스트 연습 - 단속카메라 [[-20,-15], [-14,-5], [-18,-13], [-5,-3]] 2 programmers.co.kr 1. 빨리 끝나는 순으로 정렬한다. 2. 카메라를 가장 처음에 둔다. 3. 구간 시작보다 카메라가 이전에 있다면 3-1. 끝나는 곳에 카메라를 설치한다. 코드 : def solution(routes): answer = 0 routes.sort(key = lambda x : x[1]) # 빨리 끝나는 순으로 정렬 camera = -30001 for route in routes : if camera < route[0] : # 시작위치보다 전에 카메라가 있다면 answe..

[Python/프로그래머스]섬 연결하기_Greedy(그리디)

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 Kruskal 알고리즘을 이용해 풀이하였다. 1. 비용이 작은 순으로 정렬한다. 2. connect set을 만들어 연결 여부를 확인한다. 3. while문을 통해 전부 연결될 때까지 돌린다. 3-1. cost에 이미 있으면 continue 3-2. cost에 없으면 connect 에 넣고 비용을 더한다. 4. 비용 반환 코드 : def solution(n, costs): answer = 0 costs.sort(key = lambda x : x[2]) # 비용..

[Python/프로그래머스]구명보트_Greedy(그리디)

https://programmers.co.kr/learn/courses/30/lessons/42885 코딩테스트 연습 - 구명보트 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5 programmers.co.kr 인덱스를 이용해서 풀이한다. 직접 pop해서 풀면 효율성에서 실패한다고 한다. 코드 : def solution(people, limit): answer = 0 people.sort() i ,j = 0, len(people)-1 # i : 가장 마른 사람, j : 가장 뚱뚱한 사람 while i