본문 바로가기

분류 전체보기

맥을 윈도우처럼 모든 프로그램 alt + tab 화면 전환 hyperswitch를 설치하고 다음과 같이 설정하면 command + tab으로 프로그램 전환을 할 수 있다.
클린 코드 소개 및 OOP 컴파일러, 인터프리터, VM이 이해할 수 있는 코드는 누구나 짤 수 있다. 하지만 사람이 이해할 수 있는 코드는 잘 교육된 SW 엔지니어만 짤 수 있다. 현실은 빠르게 만들어야 해서 TDD, 리팩토링, 코드 리뷰도 안한다. 나중에 한다고 말만 하고 안한다. 대부분의 버그는 버그를 수정하다 나온다. 코드 1줄 수정하면 3줄에서 버그가 발생한다. 프로젝트 완료가 다가올 수록 수정하는 데 자원이 많이 든다. 클린 아키텍처를 이용하면 처음에는 시간이 좀 걸릴지라도 나중에 자원을 아끼게 된다. 내가 구현하려는 것을 대략적으로라도 종이, 화이트보드에 그려봐야 한다. 1. Why Clean Code SW는 한번 작성되면 10번 이상 읽힌다. 나뿐만 아니라 다른 사람들도 보기 편하도록 작성해야 한다. 인간이 이해할 수..
2018 카카오 블라인드 코딩 테스트 1차 길 찾기 게임 root의 y값은 가장 크다. 이후의 root의 왼쪽, 오른쪽 자식은 차례대로 y값이 감소한다. 자식 삽입은 자식의 x값이 root의 x보다 큰지 작은지로 판단하면 된다. 테스트 케이스 6, 7번 런타임 에러가 나는 경우가 있는데 python에선 stack overflow를 방지하기 위해 재귀 횟수에 제한을 둔다. 횟수 제한 확인은 파이썬 콘솔 상에서 아래 코드를 입력하면 된다. 제한은 1000번이다. import sys sys.getrecursionlimit() 재귀 제한을 변경하는 방법은 아래와 같다. import sys sys.setrecursionlimit(10**4) 이걸 코드 상단에 작성해주면 이 문제에 대한 테스트 케이스를 커버할 수 있다. 아래 작성한 find() 메서드는 사용되지 않는다...
2018 카카오 블라인드 코딩 테스트 1차 무지의 먹방 라이브 단순히 풀면 효율성 탈락.. 한번에 음식을 없애고 그만큼의 시간을 감소시키는 방법을 썼다. 이런 생각을 어떻게 하지 def solution(food_times, k): # food_times를 value 오름차순 후 index 오름차순 times = sorted(enumerate(food_times), key=lambda k:(k[1], k[0])) before = 0 length = len(times) for i, v in enumerate(times): diff_v = v[1] - before diff_l = length - i if diff_v != 0: past_time = diff_v * diff_l if k >= past_time: k -= past_time before = v[1] else:..
2018 카카오 블라인드 코딩 테스트 1차 실패율 런타임 에러가 좀 났었는데 나누는 값이 0인 경우 처리를 안해줘서 났다. 1부터 N까지의 stage 번호를 level(단계)로 표현하고 각 level마다 stages를 돌면서 유저가 있는 stage가 level보다 크거나 같다면 스테이지에 도달한 유저인 arriver를 1증가시키고, level과 유저가 있는 stage가 같다면 아직 클리어 못했으므로 not_clear를 1 증가시킨다. 나누는 값인 arriver가 0인 경우 level에 대한 실패율은 0으로 처리한다. 도착한 사람이 있는 경우엔 실패율을 구한다. fail_ratio는 각 스테이지를 key로 실패율을 value로 저장한다. 주어진 스테이지를 모두 돌았다면 dict의 value를 기준으로 내림차순 정렬한다. (1차로 value를 기준으로 정렬..
2018 카카오 블라인드 코딩 테스트 1차 오픈채팅방 record에 있는 문자열을 공백 단위로 끊어서 list화 했다. Enter인 경우 name_dict에 uid를 key로 하고 name을 value로 넣었다. Change인 경우 name이 갱신된다. Leave했다가 Enter한 경우도 갱신된다. 최종적으로 이름을 다 바꿨으면 record에 있는 순서대로 uid로 name_dict에 접근해서 value를 가져온다. def solution(record): name_dict = {} msg_list = [] for i, msg in enumerate(record): record[i] = msg.split(' ') for msg in record: if len(msg) > 2 and msg[0]: name_dict[msg[1]] = msg[2] for msg ..
프로그래머스 단어 변환 BFS, DFS 두가지 방법으로 다 풀 수 있는 것 같다. DFS로 target에 도달할 때까지의 모든 거리 중 최소 거리를 구하면 될 것 같았는데 막상 해보니까 잘 안됐다.. BFS로 풀었다. 레벨별로 그래프 탐색을 하다가 target을 만나면 도달하는데 걸린 거리를 반환하면 된다. 시작하는 노드를 queue에 넣고 while문을 돌린다. while문이 끝날 때까지 answer를 찾지 못하면 0을 반환한다. checker는 BFS를 하면서 이전 레벨의 노드를 재방문하지 못하게 하기 위한 것이다. queue_tmp를 생각해내기 어려웠는데, queue만 사용해서 노드를 추가하게 되면 레벨이 증가할 때마다 answer가 증가하는 게 아니라 같은 레벨의 노드를 방문하는데도 answer를 증가시키게 된다. qu..
프로그래머스 네트워크 computers의 각 원소는 컴퓨터이므로 컴퓨터마다 돌면서 연결된 컴퓨터들을 체크하면 된다. queue를 활용한 BFS를 적용한 check_com으로 초기에 선택한 컴퓨터에 연결된, 아직 체크되지 않은 모든 컴퓨터에 대해서 체크해준다. 이 컴퓨터는 queue에 들어간다. queue가 빌 때까지 check_com을 계속 호출하면 연결된 네트워크를 찾을 수 있다. 나머지 컴퓨터에 대해서 검사를 하는데 이미 체크된 것은 특정 네트워크에 속한 것이므로 검사할 필요가 없다. 체크되지 않은 컴퓨터가 있다면 answer를 증가시키고 컴퓨터를 queue에 넣고 check_com을 호출한다. 결론은 컴퓨터 하나하나를 트리의 root로 생각하고 방문하지 않았으면 answer를 증가시키고 연결된 컴퓨터(노드들)를 방문하는..