본문 바로가기

알고리즘

(54)
[종만북] 3부 좋은 코드를 짜기 위한 원칙. 간결한 코드를 작성하기: 프로그래밍 대회에서 코드를 작성할 때 첫번째 원칙은 간결한 코드를 작성하라는 것입니다. 코드가 짧으면 짧을 수록 단순한 버그가 생길 우려가 줄어들고, 디버깅도 쉬워집니다. 이 원칙은 어디에든 적용됩니다. 적극적으로 코드 재사용하기: 당장 차이점이 없더라도 항상 코드를 깔끔하게 작성하고 유지하는데 신경을 쓰다보면 스스로가 그와 같은 코드에 익숙해집니다. 간결한 코드에 익숙한 사람은 다음 번에 비슷한 코드를 짤 때 처음부터 좀더 간결하게 코딩할 수 있게 됩니다. 항상 같은 형태로 프로그램을 작성하기: 같은 코드를 작성하는 더 좋은 방법에 대해 꾸준히 고민할 필요는 있지만, 자주 작성하는 알고리즘이나 코드 등에 대해서는 한 번 검증된 코드를 작성하고 이것..
[2022 KAKAO BLIND RECRUITMENT] 양과 늑대 ⭐️ 양과 늑대 heap을 사용해서 양과 늑대의 우선순위 즉 양은 0이므로 앞에 온다. 를 이용해서 빠르게 제출을 할 수 있었다. 27점이나 맞았네..? import heapq def solution(info, edges): graph = [[] for _ in range(len(info))] for a,b in edges: graph[a].append(b) # graph[b].append(a) visited = [False] * len(info) print(graph) def traversing(start, animal: int , sheep, wolf): visited[start] = True q = [] heapq.heappush(q, (animal,start)) # q.append(start) w..
[2021 카카오 채용연계형 인턴쉽] 표 편집 ⭐️ 표 편집 첫 제출에 8점을 받았습니다. ㅋㅋㅋㅋㅋㅋ 코드에서 문제가 뭐였고 개선할 점을 찾아서 나아가봅시다. def solution(n, k, cmd): # print(n, k ,cmd ) # n 행의수 k. 행의 위치 cmd 명령어 answer = '' cursor = k true_table = [i for i in range(n)] table = [i for i in range(n)] deleted = [] for i in range(len(cmd)): prefix = cmd[i][0] if prefix == 'U': cursor -= int(cmd[i][-1]) if prefix == 'D': cursor += int(cmd[i][-1]) if prefix == 'C': deleted_inde..
[종만북] 개관 ~ 2부 “잘하는 사람과 못하는 사람의 생산성 차이가 스무배" 이라는 말이 진지하게 나올 수 있는 분야가 컴퓨터 전공입니다. (Thinking in Java. 브루스에켈) 이런 현상의 가장 근본적인 이유는 대부분 컴퓨터 과학 교육 과정이 프로그래밍의 기술과 지식을 가르칠 뿐, 그것을 스스로 응용 할 수 있는 능력은 주지 못하기 때문입니다. 지식을 진정 자신의 것으로 만들어 활용할 수 있기 위해서는 학문이 발전하는 과정에서 일어난 발견과 깨달음을 학생 자신이 되짚어갈 수 있어야합니다. 프로그래밍은 문제 해결이다. 프로그래머가 사용하는 언어나 라이브러리, 알고리즘에 대한 지식들이 퍼즐의 조각이라면 문제 해결 능력은 적재 적소에 퍼즐 조각을 배치하고 이들을 연결해서 큰 그림을 만드는 능력이라고 할 수 있습니다. 02...
[2019 카카오 개발자 겨울 인턴쉽] 튜플 ⭐️ 튜플 레벨2 문제입니다. split 을 이용해서 잘 나눠주고 길이로 정렬을 해줍니다. 그 후 set의 difference 함수를 이용해서 차이만큼 결과 리스트에 더해줍니다. def solution(s): answer = set() result = [] srcs = s[2:-2].split('},{') srcs.sort(key=lambda x : len(x)) for src in srcs: temp = set(list(map(int, src.split(',')))) result = result + list(set.difference(temp, answer)) answer=temp return result 다음은 프로그래머스 다른 사람 풀이에서 본 좋은 풀이입니다. def solution(s): # {..
[2022 KAKAO BLIND RECRUITMENT] 신고 결과 받기 ⭐️ 신고 결과 받기 📝 설계 우선 문제를 꼼꼼히 읽어야 겠다는 생각을 했습니다.. 가장 큰 제약 조건은 신고한 사람이 같은 사람을 또 신고했을 때, 신고 횟수는 늘어나지 않는다는 것입니다. 또, 문제에서 매개변수로 준 id_list, report, k라는 조건을 모두 활용하려고 노력했습니다. 제 풀이는 defaultdict을 이용했는데 이때 신고횟수를 세는 딕셔너리 한개와 누가 누구를 신고했는지 기록하는 딕셔너리 한개를 만들었습니다. 그리고, 누가 누구를 신고하고 신고횟수를 카운팅해주었는데, 예를들어 a가 b를 신고했을 때 b가 a의 신고 리스트에 들어있다면 신고 횟수를 늘리지 않았습니다. 그리고 그 두개의 딕셔너리에 대해 2중 for문을 돌면서, 탐색을 진행했습니다. 신고 횟수가 k 이상인 사람에 대..