[프로그래머스] 오픈 채팅방 - 파이썬(Python)
오픈 채팅방 2019 KAKAO BLIND RECRUITMENT 문제 문제 설명 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오픈 채팅방을 개설한 사람을 위해, 다양한 사람들이 들어오고, 나가는 것을 지켜볼 수 있는 관리자창을 만들기로 했다. 채팅방에 누군가 들어오면 다음 메시지가 출력된다. "[닉네임]님이 들어왔습니다." 채팅방에서 누군가 나가면 다음 메시지가 출력된다. "[닉네임]님이 나갔습니다." 채팅방에서 닉네임을 변경하는 방법은 다음과 같이 두 가지이다. 채팅방을 나간 후, 새로운 닉네임으로 다시 들어간다. 채팅방에서 닉네임을 변경한다. 닉네임을 변경할 때는 기존에 채팅방..
Python/프로그래머스 / 2021. 12. 7. / Yoonkie
[프로그래머스] 신규 아이디 추천 - 파이썬(Python)
신규 아이디 추천 2021 KAKAO BLIND RECRUITMENT 문제 문제 설명 1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다. 2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다. 3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다. 4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다. 5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다. 6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다. 만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마..
Python/프로그래머스 / 2021. 12. 7. / Yoonkie
[프로그래머스] 완주하지 못한 선수 - 파이썬(Python)
완주하지 못한 선수 - 해시 문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 제한 사항 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다. 입출력 예 participant completion re..
Python/프로그래머스 / 2021. 12. 7. / Yoonkie
[프로그래머스] 모의고사 - 파이썬(Python)
모의고사 문제 설명 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution ..
Python/프로그래머스 / 2021. 12. 7. / Yoonkie
[Python] 정렬 / 병합 정렬(Merge Sort)
병합 정렬 정렬 안되어 있는 리스트의 크기가 각각 1이 될때까지 리스트를 반으로 나눕니다. (분할) 나뉜 리스트를 다시 정렬하면서(정복) 결합하는 방식입니다. 병합 정렬 과정 복사를 위해 추가적인 리스트가 필요합니다. 리스트를 더이상 분해되지 않을 때까지, 재귀호출을 통해 분할합니다. 2개의 부분 리스트의 값들을 서로 비교하며 작은 값들을 먼저 새로운 리스트에 복사합니다. 각 단계를 마치게 되면, 값을 복사한 리스트를 원래의 리스트로 옮깁니다. 반복 2개의 부분리스트를 새로운 리스트에 정복, 결합하는 과정 병합 정렬 # 리스트 분할 def merge_sort(seq, left, right): # 더이상 쪼개지지 않을 경우 if left >= right: return mid = (left + right) ..
Python/알고리즘, 자료구조 / 2021. 12. 7. / Yoonkie
[Python] 정렬 / 퀵 정렬(Quick Sort)
퀵 정렬 퀵 정렬은 불안정 정렬에 속하며, 다른 원소와 비교하며 정렬하는 비교정렬입니다. 평균적으로 매우 빠른 속도로 정렬을 수행합니다. 분할 정복 방법을 수행합니다. 분할 정복 방법이란, 각각 두개의 문제로 분리하여 해결한 다음 결과를 모아서 원래의 문제를 해결합니다. 퀵 정렬 수행 방법 임의의 하나의 원소를 선택합니다.(선택된 원소의 위치를 pivot이라 하고, 보통 맨 처음을 pivot으로 지정) pivot보다 작은 원소들을 왼쪽, pivot보다 큰 원소들을 오른쪽으로 배치합니다. pivot을 기준으로 분할하여 순환 호출을 통해 반복 정렬을 하며 마칩니다. 퀵 정렬 코드 def quick_sort(seq, start, end): # 배열의 시작과 끝점을 입력 if start >= end: # 원소가..
Python/알고리즘, 자료구조 / 2021. 11. 30. / Yoonkie
[Python] 딕셔너리/collections/두 주사위의 합의 경우의 수
두 주사위의 합의 경우의 수 구하기 이전에 공부했던 collections 모듈의 defaultdict와 Counter를 사용해서 두개의 주사위를 굴렸을 때 나올 수 있는 주사위 눈의 합과 경우의 수를 구해보겠습니다. 주사위의 눈의 합은 최소 2 부터 최대 12까지 나올 수 있으며 예를 들어, 주사위의 합이 5라면 나올 수 있는 경우의 수는 (1,4), (2,3), (3,2), (4,1)로 4가 됩니다. from collections import Counter, defaultdict # S : 주사위의 합 def find_dice(S, n_faces = 6): # 예외 처리 if S > 2 * n_faces or S < 2: return None cdict = Counter() # 카운터 딕셔너리(경우의 ..
Python/파이썬 / 2021. 11. 30. / Yoonkie
[Python] collections 모듈(defaultdict, OrderedDict, Counter)/문장의 단어 갯수 세기
collections 파이썬에 내장되어 있는 기본 모듈로, tuple, list, set, dictionary 에 대한 특수한 데이터형을 제공합니다. defaultdict 기본값(Default)이 존재하는 딕셔너리입니다. 딕셔너리에 신규값을 생성할 때 유용합니다. setdefault 기존의 딕셔너리 데이터형에서도 기본값을 정해줄 수 있는 setdefault()가 존재합니다. 딕셔너리.setdefault(key, value)쌍으로 사용할 수 있습니다. 하지만, 딕셔너리에 신규값을 생성할 때 항상 setdefault()를 호출해야하기 때문에 defaultdict가 더 효율적이라고 할 수 있습니다. 문장 내의 단어 갯수 세기에 적용하면서 비교를 해보겠습니다. setdefault를 사용하여 문장 내 단어 갯수 ..
Python/파이썬 / 2021. 11. 30. / Yoonkie