알고리즘

    [프로그래머스 LV1] 제일 작은 수 제거하기 문제 풀이 (Javascript)

    문제 설명 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다. 제한 조건 arr은 길이 1 이상인 배열입니다. 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다. 입출력 예 array return [4,3,2,1] [4,3,2] [10] [-1] 정답 풀이 처음 풀이 function solution(arr) { const length = arr.length; if (length === 1) return [-1]; let minimum; for..

    [프로그래머스 LV1] 짝수와 홀수 문제 풀이 (Javascript)

    문제 설명 정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요. 제한 조건 num은 int 범위의 정수입니다. 0은 짝수입니다. 입출력 예 num return 3 "Odd" 4 "Even" 정답 풀이 처음 시도 function solution(num) { return num % 2 === 0 ? "Even" : "Odd"; } 리팩토링 function solution(num) { return num % 2 ? "Odd" : "Even"; } 0은 false 인 것을 이용한 리팩토링

    [프로그래머스 LV1] 평균 구하기 문제 풀이 (Javascript)

    문제 설명 정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요. 제한사항 arr은 길이 1 이상, 100 이하인 배열입니다. arr의 원소는 -10,000 이상 10,000 이하인 정수입니다. 입출력 예 array return [1,2,3,4] 2.5 [5,5] 5 정답 풀이 내가 풀었던 풀이 function solution(arr) { let sum = 0; for (let i = 0; i sum + item) /..

    [프로그래머스 LV1] 하샤드 수 문제 풀이 (Javascript)

    문제 설명 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요. 제한 조건 x는 1 이상, 10000 이하인 정수입니다. 입출력 예 arr return 10 true 12 true 11 false 13 false 입출력 예 설명 입출력 예 #1 10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다. 입출력 예 #2 12의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다. 입출력 예 #3 11의 모든 자릿수의 합..

    [프로그래머스 LV1] x만큼 간격이 있는 n개의 숫자 문제 풀이 (Javascript)

    문제 설명 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요. 제한 조건 x는 -10000000 이상, 10000000 이하인 정수입니다. n은 1000 이하인 자연수입니다. 입출력 예 x n answer 2 5 [2,4,6,8,10] 4 3 [4,8,12] -4 2 [-4, -8] 정답 풀이 function solution(x, n) { let answer = []; for (let i = 1; i

    [프로그래머스 LV1] 소수 만들기 문제 풀이 (Javascript)

    문제 설명 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요. 제한사항 nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다. nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다. 입출력 예 nums result [1,2,3,4] 1 [1,2,7,6,4] 4 입출력 예 설명 입출력 예 #1 [1,2,4]를 이용해서 7을 만들 수 있습니다. 입출력 예 #2 [1,2,4]를 이용해서 7을 만들 수 있습니다. [1,4,6]을 이용..

    [프로그래머스 LV1] 완주하지 못한 선수 문제 풀이 (Javascript)

    문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 제한사항 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다. 입출력 예 participant completion return ["leo", "kik..

    [알고리즘] 이진 탐색 알고리즘 알기

    [참고 영상] 나동빈 유튜브 이코테 www.youtube.com/watch?v=94RC-DsGMLo&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=5 순차 탐색 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 확인하는 방법 이진 탐색 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법 - 시작점, 끝점, 중간점을 이용하여 탐색 범위를 설정한다. 이진 탐색의 시간 복잡도 탐색 범위를 2로 나누는 것과 동일하므로 연산 횟수는 log2 N에 비례한다. O(log N)을 보장한다. 파이썬 코드 def binary_search(array, target, start, end): if start > end: return mid = (..

    [알고리즘] 정렬 알고리즘 알기

    [이코테] 나동빈 유튜브 www.youtube.com/watch?v=KGyK-pNvWos&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=4 선택 정렬 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것을 반복한다. 파이썬 코드 array = [4,3,1,7,8,9,5,2,6] for i in range(len(array)): min_indxe = i for j in range(i+1, len(array)): if array[min_indxe] > array[j]: min_indxe = j array[i], array[min_indxe] = array[min_indxe], array[i] print(array) 삽입 정렬 처리되지 않은 데이터를 하나씩 골라 적절..

    [알고리즘] DFS & BFS 알기

    참고 영상 나동빈 유튜브 이코테 2021 강의 몰아보기 : DFS & BFS 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 탐색이라고 한다. DFS & BFS는 대표적인 그래프 탐색 알고리즘이다. DFS 와 BFS를 공부하기전에 무조건 알아야 할 자료구조 두 가지 스택과 큐를 알아야 한다. 스택 먼저 들어 온 데이터가 나중에 나가는 형식(선입후출)의 자료구조 대표적인 예시 : 박스 쌓기 스택 자료구조는 삽입과 삭제의 연산으로 이루어진다. 파이썬에서 스택을 사용하려면 단순하게 list로 사용하면 된다. stack = [] stack.append(1) # 1 stack.append(3) # 1 - 3 stack.append(5) # 1 - 3 - 5 stack.append(7) # 1 - 3 - 5 ..

    [알고리즘] 그리디 알고리즘 알기

    그리디 알고리즘 현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미 그리디 해법은 정당성 분석이 중요하다. - 단순히 가장 좋아 보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는지 검토 매 상황에서 가장 큰 값만 고르는 것이다. 일반적인 상황에서는 그리디 알고리즘은 최적의 해를 보장할 수 없을 때가 많다. (그 순간만 판단하기 때문에) 그리디 알고리즘을 설명하기 위해 자주 등장하는 예시 문제라고 한다. 가장 큰 단위 화폐부터 돈을 거슬러 주면 된다. 1260원을 거슬러 줘야한다고 할 때 500원부터 거슬러주면, 500 x 2 = 1000, 100원 => 100 x 2 = 200, 50원 => 50 x 1 = 50, 10원 => 10 x 1 = 10 이런 식으로 그럼 이렇게 큰 화폐 단위부터 ..

    [이코테] 코딩 테스트 출제 경향 분석 및 파이썬 문법 부수기

    동빈좌의 유튜브를 보며, 파이썬 알고리즘 공부하기 www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC 알고리즘 성능 평가 복잡도가 낮을수록 더 좋은 알고리즘이다! 그냥 소스 코드가 복잡해보인다. 와는 다른 얘기이다. 성능적인 측면에서의 복잡도를 이야기 하는 것이다. 시간복잡도 특정한 크기의 입력에 대해서 수행 시간 분석 공간복잡도 특정한 크기의 입력에 대해서 메모리 사용량 분석 빅오 표기법 가장 빠르게 증가하는 항만을 고려하는 표기법. (알고리즘 푸는 입장에서는 위와 같이 이해해도 상관없다고 한다.) 리스트 객체를 array에 할당해주고, for문에서 모든 데이터를 하나씩 다 확인을 하니까, 수행시간은 데이터의 개수인 N..