TIL 10 알고리즘 공부하자
자연수 뒤집어 배열로 만들기 [23번 문제]
[문제설명]
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요.
예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
[제한조건]
n은 10,000,000,000이하인 자연수입니다.
function solution(n) {
let num = 30;
console.log(n)
console.log('-'.repeat(num))
console.log(String(n))
console.log(typeof String(n))
console.log('-'.repeat(num))
console.log(String(n).split(''))
console.log('-'.repeat(num))
console.log(String(n).split('').reverse())
console.log('='.repeat(num))
console.log(String(n).split('').reverse().map(i => parseInt(i)))
return String(n).split('').reverse().map(i => parseInt(i))
}
[접근방식]
- 숫자를 split()으로 나누려 하니 안됨
- String()으로 문자 형 변환
- split()으로 나눔
- reverse()로 전환
[풀이]
map은 모든 요소에 똑같이 적용 되는 함수
문자열 다루기 기본 [17번 문제]
[문제설명]
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요.
예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
[제한조건]
s는 길이 1 이상, 길이 8 이하인 문자열입니다.
=> 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
function solution(s) {
const len = s.length
if (len === 4 || len === 6){
return s.split('').every((c)=>!isNaN(c))
}
return false
}
서울에서 김서방 찾기 [18번 문제]
[문제설명]
String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.
[제한조건]
seoul은 길이 1 이상, 1000 이하인 배열입니다.
seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다.
"Kim"은 반드시 seoul 안에 포함되어 있습니다.
=> Kim이 몇번째 인덱스에 노출되는지
function solution(seoul) {
let findKim = seoul.indexOf('Kim')
return `김서방은 ${findKim}에 있다`
}
[접근방식]
- indexOf
[풀이]
[문제링크]
[다른사람풀이]
완주하지 못한 선수 [20번 문제]
[문제설명]
수많은 마라톤 선수들이 마라톤에 참여하였습니다.
단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열
completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
[제한조건]
마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
completion의 길이는 participant의 길이보다 1 작습니다.
참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
참가자 중에는 동명이인이 있을 수 있습니다.
=> completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
function solution(participant, completion) {
participant.sort()
completion.sort()
for(let i = 0; i < participant.length; i++){
if(participant[i] !== completion[i]){
return participant[i]
}
}
}
[접근방식]
- sort()
[풀이]
1. 참가자와 완주자 배열 모두 정렬한다.
2. 참가자 배열의 길이만큼 반복해서 i 값을 만듬
3. 참가자 인덱스와 완주자 인덱스 비교
4. 비교 후 같지 않은 참가자만 리턴
이상한 문자 만들기 [21번 문제]
[문제설명]
문자열 s는 한 개 이상의 단어로 구성되어 있습니다.
각 단어는 하나 이상의 공백문자로 구분되어 있습니다.
각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼
문자열을 리턴하는 함수, solution을 완성하세요.
[제한조건]
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
=> 짝수번째는 대문자, 홀수번쨰는 소문자.
function solution(s){
const answer =
s.split(" ").map((valueArr) => {
return valueArr.split("").map((value, index) => {
return !(index % 2) ? value.toUpperCase() : value.toLowerCase();
}).join("")
}).join(" ");
return answer;
}
[접근방식]
- toUpperCase()
- index
- % 나누기 연산자
[풀이]
자릿수 더하기 [22번 문제]
[문제설명]
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
[제한조건]
N의 범위 : 100,000,000 이하의 자연수
=> 자릿수 만큼 있는 숫자 다 더하기
function solution(n) {
let num = String(n).split('')
let value = 0;
for (let i = 0; i < num.length; ++i){
value += parseInt(num[i])
console.log(value)
}
return value
}
[접근방식]
[풀이]
정수 내림차순으로 배치하기 [24번 문제]
[문제설명]
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
[제한조건]
n은 1이상 8000000000 이하인 자연수입니다.
function solution(n) {
return parseInt(String(n).split('').sort((a,b) => b-a).map(el => parseInt(el)).join(''))
}
[접근방식]
- 함수로 다 가능할 것 같다.
- map에 대해 더 알아보자
[풀이]
1. 정수를 문자로 String
2. 문자를 쪼개고 split
3. 쪼갠걸 정렬함 sort
4. 쪼갠걸 숫자로 parseInt
5. 숫자를 합친다 join
6. 문자열 숫자로 parseInt