목록알고리즘과 자료구조 (10)
빵 입니다.
문제 설명 도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2번째 바구니, ..., 가장 오른쪽 바구니를 N번째 바구니라고 부른다. 도현이는 앞으로 M번 바구니의 순서를 역순으로 만들려고 한다. 도현이는 한 번 순서를 역순으로 바꿀 때, 순서를 역순으로 만들 범위를 정하고, 그 범위에 들어있는 바구니의 순서를 역순으로 만든다. 바구니의 순서를 어떻게 바꿀지 주어졌을 때, M번 바구니의 순서를 역순으로 만든 다음, 바구니에 적혀있는 번호를 가장 왼쪽 바구니부터 출력하는 프로그램을 작성하시오. 입출력 예 [입력] 첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ ..
문제 설명 바이러스가 숙주의 몸속에서 1초당 P배씩 증가한다. 처음에 바이러스 K마리가 있었다면 N초 후에는 총 몇 마리의 바이러스로 불어날까? N초 동안 죽는 바이러스는 없다고 가정한다. 제한 사항 1 ≤ K ≤ 108인 정수 1 ≤ P ≤ 108인 정수 1 ≤ N ≤ 106인 정수 입출력 예 [입력] 첫 번째 줄에 처음 바이러스의 수 K, 증가율 P, 총 시간 N(초)이 주어진다. [입력 예시] 2 3 2 [출력] 최종 바이러스 개수를 1000000007로 나눈 나머지를 출력하라. [출력 예시] 18 나의 풀이 const rl = require('readline').createInterface({ input: process.stdin, output: process.stdout }); rl.on('li..
빅오 표기법 필요성 코드가 작동하면 된다.~ 문제 해결만 하면 된다.~ 이렇게 생각할 수도 있지만… 엄청난 양의 데이터셋을 처리할 때, 해결 방법(알고리즘)에 따라 처리 속도가 1시간 이상 차이가 날수도 있다. => 성능이 중요하기 때문에 적합한 알고리즘을 사용해야 한다. + 코드의 성능을 얘기할 때 정확한 전문 용어를 사용하는 것이 중요하다. 더 나은 알고리즘은 무슨 뜻일까 더 빠른 것? 아니면 메모리를 더 적게 사용하는 것? 아니면 만들어지는 변수의 갯수? 아니면 함수 호출할 때마다 저장되는 데이터? 코드를 쉽게 읽을 수 있는 것? 짧은 것? 코드 실행 시간을 측정한다면? 문제1 : 기기(하드웨어)마다 다른 방식으로 시간을 기록하는데, 기기 사양에 따라 다를 수도 있다. 문제2 : 똑같은 기기가 같은..
[정의] 데이터 요소의 선형 집합 이 집합에서 논리적 저장 순서는 메모리의 물리적 저장 순서와 일치하지 않는다. 그 대신, 각각의 원소들은 자기 자신 다음의 원소를 가리킨다. (= 링크) 이 자료구조는 순회하는 동안 순서에 상관없이 효율적인 삽입이나 삭제가 가능하다. 더 복잡한 변형은 추가적인 링크를 더해, 임의의 원소 참조로부터 효율적인 삽입과 삭제를 가능하게 한다. [특징] 연결 리스트 내부의 노드 순서는 항상 유지된다. 모든 연결 리스트에는 두 개의 특수한 노드가 있다. 첫 노드인 Head, 마지막 노드인 Tail Tail 노드는 다음 노드에 대한 참조 값이 없다. 모든 노드는 두개의 값을 가지고 있다. 데이터 값과 다음 노드에 대한 참조 값 모든 타입의 자바스크립트 데이터를 노드에 할당할 수 있다..
문제 설명 머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다. 정수 n과 k가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요. 제한 사항 0 < n < 1,000 n / 10 ≤ k < 1,000 서비스로 받은 음료수는 모두 마십니다. 입출력 예 n k result 10 3 124,000 64 6 768,000 나의 풀이 function solution(n, k) { let answer = 0; // 양꼬치 1인분 12,000 const nPrice = 12000; // 음료수 1개 2,000 const kPrice = 20..
문제 설명 정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요. 제한 사항 0 ≤ numbers의 원소 ≤ 1,000 1 ≤ numbers의 길이 ≤ 100 정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다. 입출력 예 numbers result [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 5.5 [89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] 94.0 나의 풀이 function solution(numbers) { let answer = 0; const num = numbers.length; numbers.map(item => answer += item); ans..
문제 설명 정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요. 제한 사항 0 v % 2 === 0) // Array(n).fill().map((_, index) => index + 1).filter(v => v % 2 === 0) // 나온 값 모두 더하기 // Array(n).fill().map((_, index) => index + 1).filter(v => v % 2 === 0).reduce((a , c) ..
문제 설명 각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요. 예각 : 0 0 && angle < 90) { // 예각 answ..
문제 설명 정수 num1, num2가 매개변수로 주어질 때, num1을 num2로 나눈 몫을 return 하도록 solution 함수를 완성해주세요. 제한 사항 0 < num1 ≤ 100 0 < num2 ≤ 100 입출력 예 num1 num2 result 10 5 2 7 2 3 나의 풀이 function solution(num1, num2) { let answer = 0; answer = Math.floor(num1 / num2); return answer; } 다른 사람 풀이1 function solution(num1, num2) { return parseInt(num1 / num2); } // 나도 parseInt를 생각했는데, 문자열 인자를 파싱하는 목적이기 때문에 이 상황에선 맞지 않는다고 생각했..