목록Algorithms (13)
Moe's Tech Blog
오늘 필자는 자바스크립트로 프로그래머스의 예산 문제를 풀었었습니다. 몇일 전에 파이썬으로 풀었던 코드를 바탕으로 테스트 케이스를 먼저 만들고 알고리즘을 만들며 풀어나갔는데 테스트 케이스 5번, 7~16번이 틀렸습니다. 이상했었습니다. 파이썬 코드에서는 같은 코드가 정답이라고 나와있었기 때문입니다. function solution(d, budget) { let count = 0; let acc = 0; d.sort(); for (const val of d) { if (acc + val > budget) { break; } acc += val; count += 1; } return count; } 의심되는 테스트 케이스를 만들고 반복적으로 풀었습니다. 계속 틀렸었습니다. 마지막으로 MDN의 javascrip..
들어가며 우리는 주로 코딩 시험을 연습할 때 "제출 후 채점하기" 버튼을 눌러 틀렸는지 맞았는지를 확인합니다. 연습할 때는 괜찮지만 실전은 다릅니다. 회사에서 일을 할 때 선배에게 "선배님 이게 맞습니까?" 하고 계속 물어볼 수 없습니다. 또한 코딩 테스트에서는 "제출 후 채점하기" 버튼을 누르면 서버에 기록이되 많이 누르면 누를수록 안 좋게 보일 수 있습니다. 필자는 Maurício Aniche의 Effective Software Testing에 나와있는 specification based testing을 공부하며 이 문제 점들을 막을 수 있으라고 생각합니다. Specification Based Testing 절차 Step 1: 문제를 읽고 무엇을 목표로 함수를 만드는지, 함수에 들어가는 매개변수, 제..
Regex //g //g는 match 되는 모든 occurance를 의미한다 //g는 replace 메쏘드에서 matching 하는 모든 단어들을 replace 하고싶을때 유용하다 ES7에서는 //g를 replaceAll 메쏘드로 사용 가능하다 for (let key in englishToNumberObject) { const re = new RegExp(`${key}`, "g"); answer = answer.replace(re, englishToNumberObject[key]); } Spread Python의 list comprehension 처럼 비슷한 방법을 사용하고 싶을때 Reduce 를 사용하기 위해 set을 array로 바꾸고 싶을때 파이썬의 range()를 javascript에 쓰고 싶을때..
어제 필자는 프로그래머스의 ‘신규 아이디 추천’ 문제를 풀었다. import re def solution(new_id): def process_level_1(user_id): """ new_id의 모든 대문자를 대응되는 소문자로 치환합니다 """ return user_id.lower() def process_level_2(user_id): """ new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다. """ return re.sub(r"[^a-z0-9\-\_\.]", "", user_id) def process_level_3(user_id): """ new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다. """ re..
오늘 필자는 프로그래머스의 ‘신고 결과 받기’ 문재를 풀었다 def solution(id_list, report, k): answer = [] report_count = {i: 0 for i in id_list} report_details = {i: set() for i in id_list} stopped_ids = set() # 리포트 상세 정보 생성 for item in report: item = item.split() report_by, report_to = item[0], item[1] if report_to in report_details[report_by]: continue report_count[report_to] += 1 report_details[report_by].add(report_t..