본문 바로가기

알고리즘/프로그래머스

2018 KAKAO BLIND RECRUITMENT- 자동완성, 파이썬 문제 프로그래머스 링크 단어가 배열로 주어지고 각 단어 검색마다 최소한으로 몇 번의 알파벳을 입력해야하는지 구한 후 더해서 리턴하는 문제 풀이 다른 방법을 활용해 풀 수도 있지만(시간초과 주의) 예전 프로그래머스 가사검색 문제를 푼 기억이 있어서 트라이 구조를 활용했다. 트라이 자료구조의 대표적인 활용 예가 자동완성이다. 통과가 되긴 했는데 잘 맞게 쓴지는 모르겠다. 코드 class Node(): def __init__(self) : self.cnt = 0 self.dic = {} class Trie: def __init__(self): self.root = Node() def insert(self, word) : temp = self.root for w in word : if w not in temp...
2018 KAKAO BLIND RECRUITMENT- 파일명 정렬, 파이썬 문제 프로그래머스 파일명 정렬 요구능력 레벨 2 문자열 처리 구현 풀이 어려운 편은 아님 files 배열을 돌며 HEAD부분과 숫자 부분, 문자열에 담긴 순서를 뽑아 file_lst에 넣어준다. 문제 요구 조건에 따라 정렬을 해준 후 해당 인덱스에 따라 files에서 문자열을 answer에 저장해준다. 숫자부분을 뽑아내는 while 부분에서 런타임에러가 나지 않도록 주의(파이썬스럽지 않은 코드다, 개선해야겠다) 코드 def is_num(s) : if '0'
2018 KAKAO BLIND RECRUITMENT - 압축, 파이썬 1. 문제 - 프로그래머스 링크 2. 풀이 - 문제는 쉬운편인데 좀 파이썬답지않게 풀었다. - 최근 카카오 기출 경향과는 다른 문제 3. 코드 def sol(msg, arr, dic): if not msg : return i = 0 while msg[:i+1] in dic and i < len(msg): i += 1 arr.append(dic[msg[:i]]) dic[msg[:i+1]] = max(dic.values()) + 1 sol(msg[i:], arr, dic) def solution(msg): dic = {} for i in range(26) : dic[chr(ord('A')+i)] = i+1 answer = [] sol(msg, answer, dic) return answer
2018 KAKAO BLIND RECRUITMENT- 방금그곡, 파이썬 1. 문제 - 프로그래머스 문제링크 2. 풀이 - 문제가 어려운 편은 아닌데 문제를 잘 읽지 않으면 테스트케이스 통과가 어렵다. - "조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환한다. 재생된 시간도 같을 경우 먼저 입력된 음악 제목을 반환한다" 를 만족하지 않으면 테스트케이스 30번을 틀리게 된다. - "조건이 일치하는 음악이 없을 때에는 “(None)”을 반환한다." 를 만족하지 않으면 테스트 케이스 22, 23 24, 29번을 틀리게 된다. - return None , return (None) 등을 했다가 틀려서 봤더니 return "(None)" 을 했어야 했다.(생각해보면 당연) 3. 코드 # '#' 이 들어간 경우 문자열을 소문자로 바꿔주었다.(재..
2018 KAKAO BLIND RECRUITMENT[1차] 다트 게임 1. 문제 - 프로그래머스 링크 2. 풀이 - 요구한 내용을 코드로 구현하기만 하면 되기 때문에 쉬운 편. - 다트 게임은 3번으로 숫자가 정해져있음, 원소가 3개인 배열을 만들고 주어진 문자열 구분을 위해 문자열 중 3번만 나오는 기준을 찾는다. - 숫자는 10(2개 문자)이 나올 수 있고 특수문자는 옵션이기 때문에 영문자(딱 3번 나옴)가 나올때마다 idx를 변화시켜줌 - 나머지는 문제에서 요구하는대로 차례로 구현하면 됨. 3. 코드 def solution(dartResult): arr = [0, 0, 0] idx = 0 for c in dartResult: if '0'
2018 KAKAO BLIND RECRUITMENT- 비밀지도, 파이썬 1. 문제 - 링크 2. 풀이 및 개선 - 이것 역시 쉬운 문제인데 졸릴 때 풀어서 거의 어거지로 풀었다. - 비트마스크를 이용해서 풀면 간편하다. - replace 등을 활용하여 더욱 간단하게 표현 가능하다. 3. 코드 - 1차 대충짠 코드 def solution(n, arr1, arr2): answer = [] for i in range(n) : a, b, = bin(max(arr1[i], arr2[i]))[2:] , bin(min(arr1[i], arr2[i]))[2:] left = '' + ' ' * (n - len(a)) for k in range(len(a) - len(b)) : if a[k] == '1' : left += '#' else : left += ' ' right = '' for j..
2018 KAKAO BLIND RECRUITMENT - 캐시, 파이썬 1. 문제 - 프로그래머스 링크
2018 카카오 블라인드 코딩테스트 - 셔틀버스, 파이썬 1. 문제 프로그래머스 문제 링크 코딩테스트 연습 - [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 2. 풀이 - 예제를 보면 알 수 있지만 관건은 마지막 버스가 비어서 간다면 마지막 버스 출발시간에, 마지막 꽉 차서 간다면 마지막 버스에 마지막으로 탄 사람보다 1분 일찍 도착하면 된다. - 우선 timetable 배열이 문자열로 주어지기 때문에 시간을 모두 분으로 바꾸어주고 답을 구하기 위해 분을 문자열로 바꾸어주는..