본문 바로가기
300x250

개발 공부/알고리즘 개념+문제풀이46

[자료구조] 시간복잡도와 Big-O 표기법 시간복잡도와 Big-O 표기법 우리가 알고리즘 문제를 풀때 중요한 것은 해답을 찾는 것이다. 더 나아가 그 문제를 좀더 효율적인 방법을 찾는 것도 굉장히 중요하다. 좀더 효율적인 방법을 고민해 본 적이 있다면 시간 복잡도를 고민한다는 것과 같은 말이다. 알고리즘에서 빠르다는 의미는 시간으로 표현하지 않는다. 알고리즘에서는 절차(step)의 수로 결정된다. 10번의 스텝이 필요한 알고리즘보단 5번의 스텝이 필요한 알고리즘이 더 훌륭하다고 볼수있다. 시간 복잡도를 표기하는 방법은 다음과 같다. Big-O(빅-오) Big-Ω(빅-오메가) Big-θ(빅-세타) 다른건 잘 모르겠고,Big-O 표기법이 자주 사용된다. 빅오 표기법의 종류는 O(1), O(n), O(log n), O(n2), O(2n) 등이 있다. .. 2021. 7. 19.
[프로그래머스3단계] 단어 변환 with 자바스크립트(깊이 우선탐색 dfs) 문제설명 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 있습니다. 2. words에 있는 단어로만 변환할 수 있습니다. 예를 들어 begin이 "hit", target가 "cog", words가 ["hot","dot","dog","lot","log","cog"]라면 "hit" -> "hot" -> "dot" -> "dog" -> "cog"와 같이 4단계를 거쳐 변환할 수 있습니다. 두 개의 단어 begin, target과 단어의 집합 words가 매개변수로 주어질 때, 최소 몇 단계의 과정을 거쳐 begin을 target으로 .. 2021. 7. 5.
[프로그래머스 3단계] 연결된 정점드 with 자바스크립트(깊이 우선 탐색(DFS)) 문제설명 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다. 컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오. 주의사항 컴퓨터의 개수 n은 1 이상 200 이하인 자연수입니다. 각 컴퓨터는 0부터 n-1인 정수로 표현합니다. i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면 computers[i.. 2021. 7. 5.
[프로그래머스 3단계] 여행경로 with 자바스크립트 문제설명 주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 항상 "ICN" 공항에서 출발합니다. 항공권 정보가 담긴 2차원 배열 tickets가 매개변수로 주어질 때, 방문하는 공항 경로를 배열에 담아 return 하도록 solution 함수를 작성해주세요. 주의사항 모든 공항은 알파벳 대문자 3글자로 이루어집니다. 주어진 공항 수는 3개 이상 10,000개 이하입니다. tickets의 각 행 [a, b]는 a 공항에서 b 공항으로 가는 항공권이 있다는 의미입니다. 주어진 항공권은 모두 사용해야 합니다. 만일 가능한 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 return 합니다. 모든 도시를 방문할 수 없는 경우는 주어지지 않습니다. 입출력예시 코드 function solution(ti.. 2021. 7. 4.
[프로그래머스 1단계] 가운데 글자 가져오기 문제설명 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다. 주의사항 s는 길이가 1 이상, 100이하인 스트링입니다. 입출력예시 코드 function solution(s) { var answer = ''; if(s.length % 2===0) answer += s[(s.length/2)-1] + s[(s.length/2)] else if(s.length % 2 !==0) answer += s[Math.round(s.length/2)-1] return answer; } 해석 문자의 길이가 2로 나눴을 때 나머지가 0이라면 length길이를 2로 나눠 -1한 글자와 length길를 2로 나눈 글자를 더해 리턴하고, 아니라면 s.. 2021. 6. 29.
[프로그래머스 1단계] 같은 숫자는 싫어 with 자바스크립트 문제설명 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면, arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다. arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다. 배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요. 주의사항 배열 arr의 크기 : 1,000,000 이하의 자연수 배열 arr의 원소의 크기 : 0보다 크거나 같.. 2021. 6. 26.
[프로그래머스 1단계] 나누어 떨어지는 숫자 배열 with 자바스크립트 문제설명 array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요. 주의사항 arr은 자연수를 담은 배열입니다. 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다. divisor는 자연수입니다. array는 길이 1 이상인 배열입니다. 입출력예시 코드 function solution(arr, divisor) { let newArr= arr.filter((el)=> el % divisor === 0 ).sort((a,b) => a-b); if(newArr.length === 0) return [-1] r.. 2021. 6. 26.
[프로그래머스 1단계] 두 정수 사이의 합 with 자바스크립트 문제설명 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 주의사항 a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요. a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다. a와 b의 대소관계는 정해져있지 않습니다. 입출력예시 코드 function solution(a, b) { if(a===b) return a let max = Math.max(a,b) let min = Math.min(a,b); let answer =0 for(min; min 2021. 6. 26.
[프로그래머스 1단계]문자열 내 p와 y의 개수 with 자바스크립트 문제설명 대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다. 예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다. 주의사항 문자열 s의 길이 : 50 이하의 자연수 문자열 s는 알파벳으로만 이루어져 있습니다. 입출력예시 코드 function solution(s){ let str= s.toLowerCase(); let count = 0 for(let i = 0; i 2021. 6. 26.
반응형