N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 "좋다(GOOD)"고 한다. N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라. 수의 위치가 다르면 값이 같아도 다른 수이다. 풀이 JavaScript const fs = require('fs'); const input = fs.readFileSync('input.txt').toString().trim().split('\n'); const N = parseInt(input[0]); const A = input[1].split(' ').map(Number); let Result = 0; for (let k = 0; k < N; k++) { let find = A[k]; let i = 0; let j = N ..
어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한다. 이때, 사용하는 자연수는 N이하여야 한다. 예를 들어, 15를 나타내는 방법은 15, 7+8, 4+5+6, 1+2+3+4+5의 4가지가 있다. 반면에 10을 나타내는 방법은 10, 1+2+3+4의 2가지가 있다. N을 입력받아 가지수를 출력하는 프로그램을 작성하시오. 풀이 JavaScript const n = parseInt(require('fs').readFileSync("input.txt").toString().trim(), 10); let count = 1; // 가장 마지막 수만 뽑는..
시간 복잡도를 표현하는 빅오 표기법을 실제 파이썬 코드 예시와 함께 살펴보도록 하겠다. 시간 복잡도는 알고리즘의 성능과 효율성을 나타내는 지표로 사용된다. 코딩 테스트에서는 주어진 문제의 제약과 시간 복잡도에 맞는 알고리즘을 선택하여 효율적인 코드를 작성하는 것이 중요하다. 따라서 빅오 표기법을 고려하면 다양한 알고리즘의 성능을 분석하고 개선해 볼 수 있다. 시간 복잡도 예시 설명 O(1) 리스트 인덱싱 인덱스를 통해 리스트의 요소에 접근하는 작업은 일정한 시간이 소요됨 O(logn) 이진 탐색 정렬된 리스트에서 특정 값을 찾는 작업은 탐색 범위를 반으로 나누며, 탐색 속도가 로그에 비례 O(n) 선형 탐색 리스트의 모든 요소를 한 번씩 확인하는 작업은 입력 크기에 비례하여 진행됨 O(nlogn) 병합 ..
피보나치수열을 반복 함수와 재귀 함수 두 가지 방법으로 연산해보자. 피보나치수열이란 이전 두 수의 합이 다음 수가 되는 수열을 말한다. 1 + 1 + 2 + 3 + 5 + 8 + 13 + ... 반복 함수 사용 반복 함수는 for 문이나 while 문을 사용해서 함수를 구축하는 것이다. public class Main { public static int fibonacci(int number) { int one = 1; int two = 1; int result = -1; if (number == 1) { return one; } else if (number == 2) { return two; } else { for(int i = 2; i < number; i++) { result = one + two; ..
다음 문제들을 빅 오 표기법으로 나타내보자. 1. 주어진 해가 윤년인지 밝히는 다음 함수의 시간 복잡도를 빅 오 표기법으로 나타내자. function isLeapYear(year) { return (year % 100 === 0) ? (year % 400 === 0) : (year % 4 === 0); } 해답 O(1) 함수에 전달된 년도를 N이라고 하면, 년도가 몇이든 알고리즘에 걸리는 단계 수는 일정하다. 2. 주어진 배열의 모든 수를 합하는 다음 함수의 시간 복잡도를 빅 오 표기법으로 나타내자. function arraySum(array) { let sum = 0; for(let i = 0; i < array.length; i++) { sum += array[i]; } return sum; } 해답..
문제 N개의 x, y 좌표가 주어지면 오름차순으로 정렬하시오. x값이 같다면 y에 의해 정렬합니다. 입력 예제 1 4 2 8 2 3 3 5 출력 예제 1 4 2 4 2 8 3 5 풀이 sort() 메서드를 사용하여 간단하게 해결할 수 있다. function solution(arr) { let answer = arr; arr.sort((a, b) => { if(a[0] === b[0]) return a[1] - b[1]; // y좌표로 오름차순 정렬 else return a[0] - b[0]; }) return answer; }
문제 N*N의 격자판이 주어지면 각 행의 합, 각 열의 합, 대각선의 합 중 가장 큰 합을 출력하시오. 입력 예제 [[10, 13, 10, 12, 15], [12, 39, 30, 23, 11], [11, 25, 50, 53, 15], [19, 27, 29, 37, 27], [19, 13, 30, 13, 19]] 출력 예제 155 풀이 function solution(arr) { let answer = Number.MIN_SAFE_INTEGER; let n = arr.length; let sum1 = sum2 = 0; // 행, 열 for (let i = 0; i < n; i++) { sum1 = sum2 = 0; // 초기화 for (let j = 0; j < n; j++) { sum1 += arr[i]..
문제 N명의 점수가 입력되면 등수를 출력하시오. 입력 예제 [88, 65, 72, 99, 89, 78, 88] 출력 예제 [3, 7, 6, 1, 2, 5, 3] 풀이 i번째 점수보다 높은 점수가 나오면 i의 등수를 1씩 증가 function solution(g) { let answer = Array(g.length).fill(1); // 모두 1등으로 초기화 for (let i = 0; i g[i]) answer[i]++; } } return answer; }
문제 OX 문제는 맞거나 틀린 두 경우의 답을 가지는 문제를 말한다. 여러 개의 OX 문제로 만들어진 시험에서 연속적으로 답을 맞히는 경우에는 가산점을 주기 위해서 다음과 같이 점수 계산을 하기로 하였다. 1번 문제가 맞는 경우에는 1점으로 계산한다. 앞의 문제에 대해서는 답을 틀리다가 답이 맞는 처음 문제는 1점으로 계산한다. 또한, 연속으로 문제의 답이 맞는 경우에서 두 번째 문제는 2점, 세 번째 문제는 3점, ..., K번째 문제는 K점으로 계산한다. 틀린 문제는 0점으로 계 산한다. 예를 들어, 아래와 같이 10 개의 OX 문제에서 답이 맞은 문제의 경우에는 1로 표시하고, 틀린 경 우에는 0으로 표시하였을 때, 점수 계산은 아래 표와 같이 계산되어, 총점수는 1+1+2+3+1+2=10 점이다...
문제 A, B 두 사람이 가위바위보를 합니다. N번의 게임을 했을 때 이긴 사람의 이름을 출력하는 프로그램을 작성하시오. A가 이기면 A 출력, B가 이기면 B 출력, 비기면 D를 출력합니다. - 가위 : 1 - 바위 : 2 - 보 : 3 입력 설명 - 첫 번째 줄: N - 두 번째 줄: A가 낸 가위, 바위, 보 정보 - 세 번째 줄: B가 낸 가위, 바위, 보 정보 입력 예제 5 21231 32132 출력 예제 BBADB 풀이 function solution(a, b) { let answer = ""; for (let i = 0; i < a.length; i++) { // 비겼을 때 if (a[i] === b[i]) answer += "D" // A가 이겼을 때 else if (a[i] === 1 &..