QUOTE THE DAY
“ 당신이 6개월 이상 한 번도 보지 않은 코드는 다른 사람이 다시 만드는 게 훨씬 더 나을 수 있다. ”
-
이글슨 (Eagleson)
반응형
코딩테스트 입문 Day 17 문자열, 수학, 조건문, 배열, 사칙연산
출처 : https://programmers.co.kr/
숫자찾기
문제
정수 num과 k가 매개변수로 주어질 때, num을 이루는 숫자 중에 k가 있으면 num의 그 숫자가 있는 자리 수를 return하고 없으면 -1을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 0 < num < 1,000,000
- 0 ≤ k < 10
- num에 k가 여러 개 있으면 가장 처음 나타나는 자리를 return 합니다.
입출력 예
num | k | result |
29183 | 1 | 3 |
232443 | 4 | 4 |
123456 | 7 | -1 |
입출력 예 설명
입출력 예 #1
- 29183에서 1은 3번째에 있습니다.
입출력 예 #2
- 232443에서 4는 4번째에 처음 등장합니다.
입출력 예 #3
- 123456에 7은 없으므로 -1을 return 합니다.
solution.js
function solution(num, k) {
var numStr = num.toString();
for (var i = 0; i < numStr.length; i++) {
if (Number(numStr[i]) === k) {
return i + 1;
}
}
return -1;
}
- 주어진 수 num을 문자열로 변환한 후 numStr 변수에 저장합니다. 이는 num을 문자열로 바꿈으로써 각 자리의 숫자에 접근하기 위함입니다.
- 반복문을 사용하여 numStr의 각 문자(숫자)를 하나씩 확인합니다. i 변수는 현재 확인하고 있는 문자(숫자)의 인덱스를 나타냅니다.
- 반복문 안에서는 Number(numStr[i])를 통해 문자(숫자)를 숫자로 변환한 후, k와 비교합니다. 이때, === 연산자를 사용하여 값과 타입이 동일한지 비교합니다.
- 만약 현재 확인 중인 숫자가 k와 동일하다면, 해당 숫자가 처음으로 등장하는 위치를 나타내는 인덱스를 반환합니다. 인덱스는 0부터 시작하므로, i + 1을 반환합니다.
- 반복문을 모두 순회했음에도 불구하고 k를 찾지 못한 경우, -1을 반환합니다.
테스트 결과
console.log(solution(29183, 1)); // 3
console.log(solution(232443, 4)); // 4
console.log(solution(123456, 7)); // -1
n의 배수 고르기
문제
정수 n과 정수 배열 numlist가 매개변수로 주어질 때, numlist에서 n의 배수가 아닌 수들을 제거한 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ n ≤ 10,000
- 1 ≤ numlist의 크기 ≤ 100
- 1 ≤ numlist의 원소 ≤ 100,000
입출력 예
n | numlist | result |
3 | [4, 5, 6, 7, 8, 9, 10, 11, 12] | [6, 9, 12] |
5 | [1, 9, 3, 10, 13, 5] | [10, 5] |
12 | [2, 100, 120, 600, 12, 12] | [120, 600, 12, 12] |
입출력 예 설명
입출력 예 #1
- numlist에서 3의 배수만을 남긴 [6, 9, 12]를 return합니다.
입출력 예 #2
- numlist에서 5의 배수만을 남긴 [10, 5]를 return합니다.
입출력 예 #3
- numlist에서 12의 배수만을 남긴 [120, 600, 12, 12]를 return합니다.
solution.js
function solution(n, numlist) {
var answer = [];
for (var i = 0; i < numlist.length; i++) {
if (numlist[i] % n === 0) {
answer.push(numlist[i]);
}
}
return answer;
}
- 결과를 저장할 빈 배열 answer를 선언합니다.
- 반복문을 사용하여 numlist의 각 요소를 하나씩 확인합니다. i 변수는 현재 확인하고 있는 요소의 인덱스를 나타냅니다.
- 반복문 안에서는 numlist[i] % n을 통해 현재 요소를 n으로 나눈 나머지를 계산합니다. 만약 나머지가 0이라면, 해당 숫자는 n의 배수입니다.
- numlist[i] % n === 0 조건이 참인 경우, 해당 숫자를 결과 배열인 answer에 push 메서드를 사용하여 추가합니다.
- 모든 요소를 확인하고 나서는 결과 배열 answer를 반환합니다.
테스트 결과
console.log(solution(3, [1, 2, 3, 4, 5, 6])); // [3, 6]
console.log(solution(2, [10, 11, 12, 13, 14, 15])); // [10, 12, 14]
console.log(solution(5, [20, 25, 30, 35, 40])); // [20, 25, 30, 35, 40]
자릿수 더하기
문제
정수 n이 매개변수로 주어질 때 n의 각 자리 숫자의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
- 0 ≤ n ≤ 1,000,000
입출력 예
n | result |
1234 | 10 |
930211 | 16 |
입출력 예 설명
입출력 예 #1
- 1 + 2 + 3 + 4 = 10을 return합니다.
입출력 예 #2
- 9 + 3 + 0 + 2 + 1 + 1 = 16을 return합니다.
solution.js
function solution(n) {
var numStr = n.toString();
var answer = 0;
for (var i = 0; i < numStr.length; i++) {
answer += Number(numStr[i]);
}
return answer;
}
- 주어진 수 n을 문자열로 변환한 후 numStr 변수에 저장합니다. 이는 n을 문자열로 바꿈으로써 각 자리의 숫자에 접근하기 위함입니다.
- 결과를 저장할 변수 answer를 0으로 초기화합니다.
- 반복문을 사용하여 numStr의 각 문자(숫자)를 하나씩 확인합니다. i 변수는 현재 확인하고 있는 문자(숫자)의 인덱스를 나타냅니다.
- 반복문 안에서는 Number(numStr[i])를 통해 문자(숫자)를 숫자로 변환한 후, answer에 더합니다. 이를 통해 각 자리의 숫자를 모두 더할 수 있습니다.
- 모든 자리의 숫자를 확인하고 나서는 최종적으로 계산된 answer 값을 반환합니다.
테스트 결과
console.log(solution(1234)); // 10
console.log(solution(930211)); // 16
OX퀴즈
문제
덧셈, 뺄셈 수식들이 'X [연산자] Y = Z' 형태로 들어있는 문자열 배열 quiz가 매개변수로 주어집니다. 수식이 옳다면 "O"를 틀리다면 "X"를 순서대로 담은 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 연산 기호와 숫자 사이는 항상 하나의 공백이 존재합니다. 단 음수를 표시하는 마이너스 기호와 숫자 사이에는 공백이 존재하지 않습니다.
- 1 ≤ quiz의 길이 ≤ 10
- X, Y, Z는 각각 0부터 9까지 숫자로 이루어진 정수를 의미하며, 각 숫자의 맨 앞에 마이너스 기호가 하나 있을 수 있고 이는 음수를 의미합니다.
- X, Y, Z는 0을 제외하고는 0으로 시작하지 않습니다.
- -10,000 ≤ X, Y ≤ 10,000
- -20,000 ≤ Z ≤ 20,000
- [연산자]는 + 와 - 중 하나입니다.
입출력 예
n | result |
["3 - 4 = -3", "5 + 6 = 11"] | ["X", "O"] |
["19 - 6 = 13", "5 + 66 = 71", "5 - 15 = 63", "3 - 1 = 2"] | ["O", "O", "X", "O"] |
입출력 예 설명
입출력 예 #1
- 3 - 4 = -3 은 틀린 수식이므로 "X", 5 + 6 = 11 은 옳은 수식이므로 "O" 입니다. 따라서 ["X", "O"]를 return합니다.
입출력 예 #2
- 19 - 6 = 13 은 옳은 수식이므로 "O", 5 + 66 = 71 은 옳은 수식이므로 "O", 5 - 15 = 63 은 틀린 수식이므로 "X", 3 - 1 = 2는 옳은 수식이므로 "O" 따라서 ["O", "O", "X", "O"]를 return합니다.
solution.js
function solution(quiz) {
var answer = [];
for (var i = 0; i < quiz.length; i++) {
var equation = quiz[i].split(' ');
var X = parseInt(equation[0]);
var operator = equation[1];
var Y = parseInt(equation[2]);
var Z = parseInt(equation[4]);
var result;
if (operator === '+') {
result = X + Y;
} else if (operator === '-') {
result = X - Y;
}
if (result === Z) {
answer.push("O");
} else {
answer.push("X");
}
}
return answer;
}
- 결과를 저장할 빈 배열 answer를 선언합니다.
- 반복문을 사용하여 quiz의 각 요소를 하나씩 확인합니다. i 변수는 현재 확인하고 있는 요소의 인덱스를 나타냅니다.
- 반복문 안에서는 현재 퀴즈의 수식을 공백을 기준으로 분리합니다. split(' ') 메서드를 사용하여 수식을 분리하고, 분리된 요소들을 각각 X, operator, Y, Z 변수에 저장합니다.
- X와 Y는 문자열로 되어 있는 숫자를 parseInt 함수를 사용하여 정수로 변환합니다. Z도 동일하게 정수로 변환합니다.
- 수식을 계산하여 결과를 저장할 변수 result를 선언합니다. operator에 따라 +와 - 연산을 수행합니다.
- 계산된 result와 Z를 비교하여 정답 여부를 판단합니다. 만약 result와 Z가 동일하다면, 정답이므로 결과 배열인 answer에 "O"를 추가합니다. 그렇지 않으면, 오답이므로 "X"를 추가합니다.
- 모든 퀴즈에 대해 처리한 후, 결과 배열 answer를 반환합니다.
테스트 결과
console.log(solution(["3 - 4 = -3", "5 + 6 = 11"])); // ["X", "O"]
console.log(solution(["19 - 6 = 13", "5 + 66 = 71", "5 - 15 = 63", "3 - 1 = 2"])); // ["O", "O", "X", "O"]
반응형