본문 바로가기

전체 글

(171)
[프로그래머스][2018 KAKAO BLIND RECRUITMENT][Python] 방금그곡 [ 문제 ] 문제 풀러 가기 [출제 의도] 문자열 처리 [ 문제 풀이 ] ABC는 ABC#안에 들어있지 않지만, ABCD안에는 들어있습니다. C과 C#은 다르기 때문입니다. 그래서 #의 문자열 처리가 이 문제의 핵심입니다. 저는 C#은 c로 치환하여 C#과 C와의 차이를 두었습니다. 다른 '대문자#' 문자열에도 마찬가지로 적용했습니다. [ 정답 코드 ] def solution(m, musicinfos): answer = ["(None)", 0] for info in musicinfos: start, end, title, song = info.split(",") # 악보 변환 ch = {"C#": "c", "D#": "d", "F#": "f", "G#": "g", "A#": "a", "E#": "e"} f..
[프로그래머스][2018 KAKAO BLIND RECRUITMENT][Python] 비밀지도 [ 문제 ] 문제 풀러 가기 [출제 의도] 비트 연산자 활용 [ 문제 풀이 ] 지도1과 지도2의 각 정수를 비트 OR 연산자를 이용해 합칩니다. 합친 결과의 길이가 N보다 짧다면 앞 부분에 공백을 넣어 길이를 N으로 맞춥니다. 마지막으로 0은 공백으로 1은 #으로 치환하면 됩니다. [ 정답 코드 ] def solution(n, arr1, arr2): answer = [""] * n for i in range(n): tmp = str(bin(arr1[i] | arr2[i]))[2:] # 비트 OR answer[i] = (n % len(tmp)) * "0" + tmp # 고정길이 N answer[i] = answer[i].replace("0", " ") answer[i] = answer[i].replace(..
[프로그래머스][2019 KAKAO BLIND RECRUITMENT][Python] 오픈채팅방 [ 문제 ] 문제 풀러 가기 [출제 의도] 해시 활용 [ 문제 풀이 ] 먼저, record를 순회하면서 '입장과 변경 기록'을 가지고 딕셔너리를 이용해 유저 아이디마다 최종 닉네임을 구하고, '입장과 퇴장 기록'은 new_record를 만들어서 따로 저장합니다. 그다음, new_record를 순회하면서 채팅방에 출력할 메시지를 생성합니다. 이때 유저 아이디는 최종 닉네임을 사용하면 됩니다. [ 정답 코드 ] # 시간복잡도 O(N)으로 처리 from collections import defaultdict def solution(record): name = defaultdict(str) order = [] new_record = [] # 닉네임 관리 for datas in record: data = data..