프로그래밍-학습기록/코딩테스트 35

바닐라코딩 프렙 지원부터 부트캠프 어드미션 테스트까지 후기

기억에 의존한 글이라 사실과 다를 수 있으니 참고만 하시길 바랍니다🙃 일정 서류 지원 1월 31일까지 프렙 시작 3월 1일 프렙 끝 4월 30일 최종 코딩테스트 4월 30일 ~ 5월 2일 (3일동안 원하는 시간에 치르면 됨) 프렙에 지원하기까지 과정 자기소개서 제출 퀴즈에 대한 정답, 자기소개, 코스 수료 후 계획 3가지 항목을 작성해야 했다. 글자 수 제한이 없었기에 솔직하게 자신을 드러내려 노력했다. 퀴즈 정답은 운이 좋게도 바닐라코딩 블로그에 실리기도 했다. 입학 과제물기한 내에 요구사항을 만족한 입학과제물을 제출하면 된다. 입학 과제물은 사전학습가이드를 완료했다면 충분히 해결할 수 있는 난이도였다. 자기소개서 제출 이후 합격 메일을 받고 결제를 하면 사전학습가이드(이것은 언제나 볼 수 있다)와 입..

프로그래머스 | 로또의 최고순위와 최저순위 | 자바스크립트

문제 링크 해결 과정 문제 설명이 길고 복잡해 이거 1단계 맞나, 싶었지만 자세히 들여다보니 난이도가 쉬운 문제였다. 로또에서 불분명한 번호 0이 몇 개 나오는지 파악하면 최고순위와 최저순위를 자연스럽게 파악할 수 있다. 즉, 0은 어떤 번호던지 될 수 있으므로, 0이 모두 당첨번호이면 최고순위, 당첨번호가 아니면 최저순위가 된다. 따라서 이를 파악하기 위해 알아야 하는 기존의 번호들에서 몇 개가 당첨번호이고, 불분명한 번호가 몇 개인지 알아내는 것이다. 그러면 맞춘 개수에 따라 몇 등인지 알고 정답을 반환할 수 있다. 소스 코드 function solution(lottos, win_nums) { const rankPerMatches = [6, 6, 5, 4, 3, 2, 1]; const unknownN..

리트코드(LeetCode): 104. Maximum Depth of Binary Tree

이진 트리의 최대 깊이 구하기 문제 링크 문제 설명 이진 트리의 최대 깊이를 구하는 문제다. 해결 과정 처음엔 전역에 depth 변수를 선언하고 자식 노드가 있을 때마다 depth를 추가하는 재귀 함수를 작성했지만 잘 되지 않았다. 한 쪽 노드의 양쪽 자식 노드가 null일 때 다른 쪽을 판단하지 못하고 리턴되는 것이 문제였다. 그래서 끙끙 머리를 싸매다가 검색으로 해당 문제에 관한 글을 읽었다. 다루기 힘든 어려운 큰 문제를 다루기 쉬운 작은 문제로 나눠서 해결하는 재귀 방법을 소개하고 있었다. 바로 차용해봤다! 좀 더 끈기 있게 붙잡고 있었으면 풀 수 있었을까? 의문이 든 문제. 소스 코드 var maxDepth = function (root) { if (!root) { return 0; } retu..

치욕스런 날코딩, 정규표현식 배워야겠다는 다짐

프로그래머스 | level 1 | Python | 신규 아이디 추천 문제 링크 def solution(new_id): new_id = new_id.lower() new_id = validateAllLetters(new_id) new_id = removeDubleDot(new_id) new_id = removeDotOfFrontAndRear(new_id) new_id = handleEmptyId(new_id) new_id = handleLongId(new_id) new_id = handleShortId(new_id) return new_id def validateAllLetters(id): new_id = "" for letter in id: if letter.isalpha() or letter.isdig..

레벨 1 문제에서 찾은 작은 교훈

프로그래머스 | level 1 | Python | 내적 나의 풀이 def solution(a, b): answer = 0 while a and b: answer += a.pop() * b.pop() return answer 처음 문제를 읽다가 내적에 링크가 걸려 있길래 들어갔더니 영어 위키 문서였다. 그래서 찬찬히 읽으려다가 수학 용어가 나오길래 바~로 한국어 문서를 찾았다.그랬더니 더욱 깊숙한 지식의 늪에 빠졌고 내 속에선 프로그래머스에 대한 배신감과 level 1 문제에서 조차 이렇게 고전하는 자신의 무력감 또한 느껴졌다. 하지만 알고보니 무척 쉬웠던 문제. 그냥 길이(심지어 길이가 같다고!)가 같은 리스트의 요소를 순서대로(심지어 순서대로!) 곱해서 합하면 끝이다. 허무하게 (몸 곳곳에 내적 개념이..

프로그래머스 | level 1 | python | 3진법 뒤집기

프로그래머스 | level 1 | python | 3진법 뒤집기 나의 풀이 def solution(n): answer = [] while n != 0: # 3진법 적용하여 거꾸로 표현 remainder = n % 3 # 나머지 if remainder == 0: answer.append(0) else: answer.append(remainder) n = n // 3 base = 1 # 밑 sum = 0 while answer: sum += answer.pop() * base base *= 3 return sum 3진법을 다루는 간단한 문제이다. 다시 알고리즘 문제를 풀며 실력을 끌어올리리라, 다짐하며 시작했다. 안 풀어 봤던 level 1 문제를 발견해 풀었다. 편리한 언어의 대명사 파이썬이라 3진법 만드..

프로그래머스 | 파이썬 | 삼각달팽이

코딩테스트 연습 - 삼각 달팽이 엄청 어려웠다. 결국 다른 사람 풀이를 참조했다. DFS/BFS 유형의 문제 같다. 풀이의 흐름 방향에 따른 좌표 값의 증감을 미리 정해둔다. 같은 방향으로 진행하면서 값을 넣어주고 범위를 벗어나려고 하면 방향을 바꾼다. 방향을 바꿀 때 방향을 그것을 3으로 나눈 나머지로 한다. 정해진 숫자만큼 칸을 다 채웠으면 리스트에 담는다. def solution(n): dx = [1, 0, -1] # 세로 dy = [0, 1, -1] # 가로 board = [[0] * (n) for _ in range(n)] count = 1 # 채울 숫자 x, y = 0, 0 direction = 0 end_count = (n * (n + 1)) / 2 while end_count >= coun..

프로그래머스 | 파이썬 | 문자열 압축

코딩테스트 연습 - 문자열 압축 나의 풀이 주어진 문자열 길이가 1이면 1을 반환한다. 문자열을 가장 길게 압축하는 길이는 문자열 절반 길이이다. 주어진 문자열을 1부터 문자열 절반 길이까지 압축한다. 주어진 문자열을 특정 간격으로 자른다. 자른 문자열을 비교하여 압축한다. 압축한 문자열의 길이를 담은 리스트(length_list)에 모든 압축한 문자열의 길이를 담는다. length_list의 최솟값을 구한다. def solution(string): length_list = [] string_length = len(string) if string_length == 1: return 1 for compress_length in range(1, string_length // 2 + 1): length_lis..

프로그래머스 | python | 괄호 변환 | 용기의 문제

코딩테스트 연습 - 괄호 변환 힌트 없이 풀었다. 와! 문제에 있는 설명대로 구현했더니 풀 수 있었다. 의외로 구현 난이도는 쉬운 편이었다. 이 문제를 풀려면 일단 용기가 필요했다. level 2만큼의 용기가 필요하다. 처음에 봤을 때 막막해서 풀지 않았다. 결국 계속 다른 문제를 풀고 돌아돌아 도착한 문제다. def solution(given_string): if given_string == "": return "" undividable_balanced, balanced = divide_string_to_2_balanced(given_string) if is_right_bracket(undividable_balanced): return undividable_balanced + solution(balan..

프로그래머스 | python | 스킬트리

코딩테스트 연습 - 스킬트리 소요 시간 1시간 30분, 풀다 못하겠어서 다른 사람 풀이 참조함. 무작위로 이뤄진 문자열(A)에 포함된 특정 문자열(B)의 문자들이 그 특정 문자열(B)의 순서를 지키는지 검사하는 문제였다. A = "awegd", B = "ag" → A의 a,g가 B의 순서를 지키고 있다. A = "gwaed", B = "ag" → A의 a,g가 B의 순서를 지키고 있지 않다. 나의 풀이 from collections import deque def solution(skill_order, skill_trees): answer = len(skill_trees) skill_order = skill_order for skill_tree in skill_trees: skill_order_queue ..