반응형

알고리즘 35

프로그래머스) [1차] 다트 게임

https://programmers.co.kr/learn/courses/30/lessons/17682?language=javascript 코딩테스트 연습 - [1차] 다트 게임 programmers.co.kr 다트 게임의 계산 로직을 풀어보았다. *의 경우 자신과 뒤에 값에 2를 곱해주어야 해서 가장 나중에 계산하려고 했다. 따라서 S, D, T, #의 경우에 계산되는 값을 먼저 계산하였다. 이 과정에서 reduce를 사용하여 유일한 두 자리 숫자인 10은 이전 값과 현재 값을 문자열 더하기로 합쳐주었다. 그 후에 *을 찾고, 값을 계산하고 splice로 *을 없애주었다. 이 때문에 forEach가 아닌 for문을 사용하였다. 마지막으로 reduce로 누적 계산하여 답을 도출했다. 나의 풀이 functi..

IT/Algorithm 2021.10.06

Merge sort

Sorting은 일반적으로 검색과 함께 사용된다. Sorting 된 리스트는 그렇지 않은 리스트보다 검색하기가 더 쉽다. 주어진 리스트의 요소들을 정렬하는 방법은 많다. 이번 글에서는 Merge sort에 대해 알아본 내용을 정리해보려고 한다. Merge sort Merge sort는 인기 있는 방법 중 하나이며, 효율적인 방법이다. Logic Merge sort는 문제를 직접적으로 풀기 충분할 때까지 반복하여 주어진 배열을 쪼갠다. 다음 4가지 단계를 통해 그 과정을 확인해보자. 배열을 절반씩 두 개로 쪼갠다(홀수일경우 최대한 절반씩). 하나의 요소만을 가진 배열이 될 때까지 1번의 방식을 반복한다. 단일 요소 배열에서부터 시작하여, 배열을 합쳐서 sort 한다. 하나의 정렬된 배열이 될 때까지 3번을..

IT/Algorithm 2021.10.02

프로그래머스) 최소 직사각형

https://programmers.co.kr/learn/courses/30/lessons/86491?language=javascript 코딩테스트 연습 - 8주차 [[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] 120 [[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] 133 programmers.co.kr 나의 풀이 한 쌍의 값 중 큰 값을 large 리스트에 push 하고, 작은 값은 small 리스트에 push 하였다. 그리고 large 리스트에서 가장 큰 값과, small 리스트에서 가장 큰 값의 크기를 answer에 선언하여 리턴했다. function solution(sizes) { const largeSideNumber = []..

IT/Algorithm 2021.10.01

프로그래머스) 숫자 문자열과 영단어

https://programmers.co.kr/learn/courses/30/lessons/81301?language=javascript 코딩테스트 연습 - 숫자 문자열과 영단어 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자 programmers.co.kr 나의 풀이 정규 표현식을 사용하여 0부터 9까지 replace 함수를 메소드 체이닝 하였다. 그리고 parseInt로 감싸서 숫자로 반환하였다. function solution(s) { return parseInt(s.replace(/zero/g, "0") .replace(/one/g, "1") .replace(/t..

IT/Algorithm 2021.10.01

Big - O Notation) 빅오 표기법과 시간 복잡도

빅오는 알고리즘이 얼마나 빠르게 실행될지를 비교할 때 사용된다. 시간 복잡도(Time complexity)를 통해서 알고리즘의 빠르기를 비교할 수 있다. 빅오( O ), 세타( Θ ), 오메가( Ω ) 시간 복잡도를 표기할 때에는 빅오만 표기하지 않는다. 최악, 평균, 최상의 경우에 따라서 빅오, 빅 세타, 빅 오메가를 표기한다. O(n): 최악의 경우 Θ(n): 평균의 경우 Ω(n): 최상의 경우 하지만 알고리즘을 평가할 때 보통 최악의 경우를 본다고 한다. 왜일까? 왜냐하면 최상의 경우는 유용한 정보가 아니기 때문이라고 한다. 사실상 대부분의 알고리즘에 특별한 입력 값을 이용하면 O(1)을 달성할 수 있을 것이다. 즉 최악의 상황에서도 이 정도의 성능은 보장할 수 있다는 것을 알려주는 것이 더 유용하..

IT/Algorithm 2021.09.29

프로그래머스) [1차] 비밀지도

https://programmers.co.kr/learn/courses/30/lessons/17681 코딩테스트 연습 - [1차] 비밀지도 비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다 programmers.co.kr 풀이 arr1과 arr2 두 배열을 각각 2로 계속 나누어 나머지가 1이면 1, 없다면 0을 새로운 배열에 집어넣었다. 그렇게 2진수로 변환하여 for문을 돌려 각 자리마다 2진수를 더했고 1 이상인 경우 #을, 0이라면 공백을 집어넣었다. 마지막으로 join('')을 사용하여 배열을 문자열로 변환하였다. ㅠㅠ 2진수로 변환하는 과정을 간소화할 방법이 떠..

IT/Algorithm 2021.07.05

프로그래머스) 음양 더하기

https://programmers.co.kr/learn/courses/30/lessons/76501 코딩테스트 연습 - 음양 더하기 어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 re programmers.co.kr 풀이 reduce 메소드를 활용하였고, 삼항 연산자로 signs의 값에 따라 부호를 부여하였다. 그리고 answer에 덧셈 누산을 시켜 값을 반환하였다. function solution(absolutes, signs) { var answer = 0; absolutes.reduce((acc,cv,idx) => { cv = signs[idx]..

IT/Algorithm 2021.07.05

프로그래머스) 모의고사

https://programmers.co.kr/learn/courses/30/lessons/42840# 코딩테스트 연습 - 모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 programmers.co.kr 풀이 a부터 c까지 각각 1번부터 3번 학생의 찍기 패턴을 정의하였고, 그리고 모두 같은 점수를 받을 경우를 고려하여 1~3의 key를 초기값 0으로 정의하여 loser 오브젝트를 정의했다. 문제는 최대 10,000개일 수 있으므로 answers의 길이만큼 반복한다. 1~3번 학생들은 각자의 패턴이 다르므로 각각 j, k, l로 반복된다. 각각의 패턴에 정답을..

IT/Algorithm 2021.07.01

프로그래머스) 문자열 다루기 기본

https://programmers.co.kr/learn/courses/30/lessons/12918 코딩테스트 연습 - 문자열 다루기 기본 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다. 제한 사항 s는 길이 1 programmers.co.kr 풀이 먼저 문자열의 길이를 조건식으로 걸러내고, 조건에 부합하였을 때 오른쪽 조건식으로 넘어온다. 숫자 이외의 문자가 있는 경우를 search 메소드를 사용하여 확인하고 없는 경우(-1) true를 반환하고, 두 개의 큰 괄호로 묶여있는 조건식에 하나라도 부합하지 않는 경우 false를 반환한다. var s..

IT/Algorithm 2021.07.01

프로그래머스) 신규 아이디 추천

https://programmers.co.kr/learn/courses/30/lessons/72410?language=javascript 코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 programmers.co.kr 풀이 문자열에서 조건에 부합하지 않는 문자가 있는지 확인하기 위해 리터럴 방식의 정규 표현식과 match 메소드를 활용하였다. 배열로 변환할 때에는 split("")으로 문자 하나씩 나누었다. ' . '의 위치와 2개 이상 붙어있는 경우는 for문에 splice 메소드를 활용하였다. 나머지 2개 이하, 16개 이상인 문..

IT/Algorithm 2021.06.30
반응형