[코딩 테스트] 프로그래머스 JS 연습 - 가위바위보, 인덱스 바꾸기, 모스부호(1), 영어가 싫어요, 7의 개수
1. 가위바위보
문제 설명
가위는 2 바위는 0 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열 rsp가 매개변수로 주어질 때, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return하도록 solution 함수를 완성해보세요.
function solution(rsp) {
var obj = {
"0" : 5,
"2" : 0,
"5" : 2
}
return rsp.split('').map(x => obj[x]).join('')
}
객체는 obj[key] = value 라는 것을 이용해서 rsp를 split한 후 map 메소드를 이용하였다.
2. 인덱스 바꾸기
문제 설명
문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때, my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
function solution(my_string, num1, num2) {
var arr = my_string.split('');
[ arr[num1] , arr[num2] ] = [ arr[num2] , arr[num1]];
return arr.join('');
}
string은 인덱스로 문자를 바꿀 수 없으니 배열에 저장하여 디스트럭처링을 이용하였다.
3. 합성수 찾기
문제 설명
약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.
function solution(n) {
var answer = 0;
for (let i = 4; i <=n ; i++) {
var sum = 0
for (let j = 2; j <i; j++) {
if (i % j === 0) sum +=1
}
answer += sum > 0 ? 1 : 0
}
return answer;
}
알고리즘으로 시간이 많이 걸린 문제였다. 하지만 for문에서 비효율적이다.
j <= Math.sqrt(i)로 바꾸는 것이 좋다.
4. 모스부호
문제 설명
머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다. 그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 letter가 매개변수로 주어질 때, letter를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
모스부호는 다음과 같습니다.
function solution(letter) {
const morse = {
'.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
'--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
'--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
'...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
'-.--':'y','--..':'z'
}
return letter.split(" ").map(v => morse[v]).join('')
}
모스부호를 객체로 만든 후 obj[key] = value를 이용한다.
5. 영어가 싫어요
문제 설명
머쓱이
function solution(numbers) {
var answer = numbers
var str = {
"zero" : 0,
"one" : 1,
"two" : 2,
"three" :3,
"four" : 4,
"five" : 5,
"six" : 6,
"seven" : 7,
"eight" : 8,
"nine" : 9
}
for (let s in str) {
answer= answer.replaceAll(s,str[s])
}
return answer * 1
}
for문을 str 객체의 키값으로 for문 돌린 후 전제 replace한다.
이때, 문자열로 나오므로 숫자형으로 전환이 필요하다.
+) 7의 개수
문제 설명
머쓱이는 행운의 숫자 7을 가장 좋아합니다. 정수 배열 array가 매개변수로 주어질 때, 7이 총 몇 개 있는지 return 하도록 solution 함수를 완성해보세요.
function solution(array) {
var answer = 0;
for (let s of array) {
answer+= s.toString().split('').filter(x => x === "7").length
}
return answer;
}
위에는 직접 푼 코드이고,
function solution(array) {
return array.join('').split('7').length-1;
}
이것은 베스트 답안이다.
+) max
Math.max(a,b)
+) 정수확인
Number.isInteger(a)
+) 문자열 찾기
str.match(/[3|6|9]/g)
+) string
sort 제공 안함. arr에서 제공함