프로그래머스 : JavaScript 알고리즘 100일 챌린지 15일차
- 프로그래머스 : https://school.programmers.co.kr/learn/challenges/training?order=acceptance_desc
- 유트브 참고 : https://www.youtube.com/watch?v=RMmOU2u-_as&list=PLkfUwwo13dlWZxOdbvMhkzhAowaiEjuGS
코딩테스트 입문 Day15
1. 영어가 싫어요 : 영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 return 하도록 solution 함수를 완성해 주세요.
function solution(numbers) {
var answer = 0;
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
numbers | result |
"onetwothreefourfivesixseveneightnine" | 123456789 |
"onefourzerosixseven" | 14067 |
답 확인하기
const numberStrings = [ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
function solution(numbers) {
let answer = '';
for(let i=0; i<numbers.length; ){
const compareString = numbers[i] + numbers[i+1];
for(let j=0; j<numberStrings.length; j++){
const numberString = numberStrings[j];
const compareNumberString = numberString[0] + numberString[1];
if(compareString === compareNumberString){
answer += String(j);
i += numberString.length;
break;
}
}
}
return Number(answer);
}
해설 확인하기
코드는 주어진 숫자 문자열을 숫자로 변환하는 함수 solution입니다. 숫자 문자열은 영어 단어로 표현된 숫자로 이루어져 있습니다.
해당 함수는 다음과 같은 방식으로 동작합니다:
숫자 문자열과 숫자에 대한 영어 단어를 담고 있는 numberStrings 배열을 정의합니다. 각 인덱스에 해당하는 영어 단어는 해당 숫자를 나타냅니다.
초기값으로 빈 문자열 answer를 설정합니다. 이 변수는 숫자로 변환된 결과를 나타냅니다.
반복문을 통해 numbers 문자열을 순회합니다. 반복문 변수 i는 현재 숫자 문자열의 인덱스를 나타냅니다.
현재 인덱스 i와 i+1을 이용하여 두 글자의 문자열 compareString을 생성합니다.
내부 반복문을 통해 numberStrings 배열의 각 요소를 순회합니다. 반복문 변수 j는 현재 영어 단어의 인덱스를 나타냅니다.
현재 영어 단어 numberString의 첫 두 글자를 compareNumberString 변수에 저장합니다.
compareString과 compareNumberString을 비교하여 두 문자열이 일치하는지 확인합니다.
두 문자열이 일치한다면, 현재 영어 단어 numberString는 숫자를 나타내는 단어입니다. 따라서 해당 숫자의 인덱스 j를 문자열로 변환하여 answer에 추가합니다.
numberString의 길이만큼 i를 증가시켜서 다음 숫자 문자열로 이동합니다.
내부 반복문을 break를 통해 종료하고, 외부 반복문으로 돌아가 다음 숫자 문자열을 처리합니다.
반복문이 종료되고 나면, answer에는 숫자로 변환된 결과가 저장되게 됩니다.
answer를 숫자로 변환하여 반환합니다.
즉, solution 함수는 주어진 숫자 문자열을 영어 단어로 표현된 숫자로 변환하고, 해당 숫자들을 연결한 결과를 숫자로 변환하여 반환합니다.
2. 인덱스 바꾸기 : 문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때, my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
function solution(my_string, num1, num2) {
var answer = '';
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
my_string | num1 | num2 | result |
"hello" | 1 | 2 | "hlelo" |
"I love you" | 3 | 6 | "I l veoyou" |
답 확인하기
function solution(my_string, num1, num2) {
let answer = '';
for(let i=0; i<my_string.length; i++){
if(i === num1){
answer += my_string[num2];
} else if(i === num2){
answer += my_string[num1];
} else {
answer += my_string[i];
}
}
return answer;
}
해설 확인하기
코드는 주어진 문자열 my_string에서 두 개의 인덱스 num1과 num2에 해당하는 문자를 서로 교환하는 함수 solution입니다.
해당 함수는 다음과 같은 방식으로 동작합니다:
초기값으로 빈 문자열 answer를 설정합니다. 이 변수는 교환된 결과 문자열을 나타냅니다.
반복문을 통해 my_string 문자열을 순회합니다. 반복문 변수 i는 현재 문자열의 인덱스를 나타냅니다.
조건문을 사용하여 현재 인덱스 i가 num1과 같은지 확인합니다. 만약 같다면, my_string의 num2 인덱스에 해당하는 문자를 answer에 추가합니다.
위 조건이 아니고, 현재 인덱스 i가 num2와 같은지 확인합니다. 만약 같다면, my_string의 num1 인덱스에 해당하는 문자를 answer에 추가합니다.
위 두 조건 모두가 아닐 경우, 현재 인덱스 i에 해당하는 문자를 answer에 추가합니다.
반복문이 종료되고 나면, answer에는 문자열이 교환된 결과가 저장되게 됩니다.
answer를 반환합니다.
즉, solution 함수는 주어진 문자열에서 두 개의 인덱스에 해당하는 문자를 서로 교환한 결과를 반환합니다.
3. 한번만 등장한 문자 : 문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.
function solution(s) {
var answer = '';
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
s | result |
"abcabcadc" | "d" |
"abdc" |
"abcd" |
"hello" | "eho" |
답 확인하기
const obj = {}
function solution(s) {
var answer = [];
for(let i=0; i<s.length; i++){
const item = s[i];
if(obj[item]){
obj[item] += 1;
} else {
obj[item] = 1;
}
}
const objArray = Object.entries(obj);
for(let i=0; i<objArray.length; i++){
const item = objArray[i];
if(item[1] === 1){
answer.push(item[0]);
}
}
const sortedArray = answer.sort((a,b) => a.charCodeAt(0) - b.charCodeAt(0));
// let result = '';
// for(let i=0; i<sortedArray.length; i++){
// result += sortedArray[i];
// }
// return result;
return sortedArray.join('');
}
해설 확인하기
코드는 문자열 s에서 등장한 문자 중에서 한 번만 등장하는 문자들을 찾아 정렬하여 반환하는 함수 solution입니다.
해당 함수는 다음과 같은 방식으로 동작합니다:
초기값으로 빈 배열 answer를 설정합니다. 이 배열은 한 번만 등장하는 문자들을 저장하기 위한 용도로 사용됩니다.
반복문을 통해 문자열 s를 순회합니다. 반복문 변수 i는 현재 문자열의 인덱스를 나타냅니다.
조건문을 사용하여 현재 문자 item이 obj 객체에 이미 등록되어 있는지 확인합니다. obj 객체는 문자를 키로 가지고 해당 문자의 등장 횟수를 값으로 가집니다. 만약 item이 obj에 이미 등록되어 있다면, 해당 문자의 등장 횟수를 1 증가시킵니다. 그렇지 않다면, 해당 문자를 obj에 등록하고 등장 횟수를 1로 설정합니다.
obj 객체의 키-값 쌍을 배열 형태로 변환하여 objArray에 저장합니다. 이 때, Object.entries() 메서드를 사용하여 객체를 배열로 변환합니다.
objArray를 순회하면서 등장 횟수가 1인 문자들을 찾아 answer 배열에 추가합니다.
answer 배열을 문자열 순서대로 정렬합니다. 이 때, sort() 메서드에 정렬 비교 함수를 제공하여 문자의 유니코드 값에 기반하여 정렬합니다.
정렬된 answer 배열을 문자열로 변환하여 반환합니다. 이 때, join() 메서드를 사용하여 배열 요소를 하나의 문자열로 결합합니다.
즉, solution 함수는 문자열 s에서 등장 횟수가 한 번인 문자들을 찾아 정렬된 문자열 형태로 반환합니다.
4. 약수 구하기 : 정수 n이 매개변수로 주어질 때, n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
function solution(n) {
var answer = [];
return answer;
}
길라잡이
- 데이터를 수정해서 답을 구해보세요.
- 예시
n | result |
24 | [1, 2, 3, 4, 6, 8, 12, 24] |
29 | [1, 29] |
답 확인하기
function solution(n) {
var answer = [];
for(let i=1; i<=n; i++){
if(n % i === 0){
answer.push(i);
}
}
return answer;
}
해설 확인하기
코드는 주어진 숫자 n의 약수를 찾아 배열로 반환하는 함수 solution입니다.
해당 함수는 다음과 같은 방식으로 동작합니다:
초기값으로 빈 배열 answer를 설정합니다. 이 배열은 n의 약수들을 저장하기 위한 용도로 사용됩니다.
반복문을 통해 i 변수를 1부터 n까지 증가시키며 숫자를 순회합니다. i는 현재 검사하고 있는 수를 나타냅니다.
조건문을 사용하여 n을 i로 나누었을 때 나머지가 0인지 확인합니다. 만약 나머지가 0이라면, i는 n의 약수이므로 answer 배열에 추가합니다.
반복문이 종료되면, answer 배열에는 n의 약수들이 저장되어 있습니다. 해당 배열을 반환합니다.
즉, solution 함수는 주어진 숫자 n의 약수들을 찾아 배열로 반환합니다.