Lsiron
코딩테스트 10(map, join) 본문
문제 1. 크기가 작은 부분 문자열
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.
풀이=해답.
function solution(s) {
let ws = s.split(' ');
let rWs = ws.map(w => {
let rW = '';
for (let i = 0; i < w.length; i++) {
if (i % 2 === 0) {
rW += w[i].toUpperCase();
} else {
rW += w[i].toLowerCase();
}
}
return rW;
});
return rWs.join(' ');
}
=> 일단 단어를 공백 기준으로 split() 메서드를 사용하여 나눠준다. 그러면 단어로만 이루어진 배열이 완성된다.
다음으로 이 배열을 map 함수로 순회시켜준다. 단, 대문자와 소문자로 변환하는 반복문을 map 함수 안에 넣어주는데 반복문을 사용하기에 앞서 각 단어를 문자열로 넣어줘야하기 때문에 초기화 시킨 빈 문자열을 선언한다.
(애초에 반복문을 실행시켜서 결과값을 받으려면 무조건 선언해야한다. 또한 toUpperCase()와 toLowerCase()는 안에있는 문자열을 바꿔주는게 아니라 바꾼 문자열을 반환한다.)
반복문은 처리가 완료된 단어를 반환하도록 한다. 그러면 map() 함수를 거쳐 빈 배열에 변환된 단어들이 하나씩 추가 된다.
마지막으로 이 변환된 단어들의 배열을 공백을 넣어서 문자열로 만들어준다.
// 이게 왜 14점..? 그냥 공백 기준으로 단어사이를 나누고 map함수로 단어를 순회하며 대문자와 소문자로 바꿔준 후, 다시 공백을 넣어서 배열을 문자열로 바꿔줬을 뿐인데 굉장히 잘 풀었나보다.. 실력이 늘어난건지 운이 좋은건지..
문제 2. 삼총사
한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.
[-3, -2, -1, 0, 1, 2, 3]
학생들의 정수 번호 쌍 (-3, 0, 3), (-2, 0, 2), (-1, 0, 1), (-2, -1, 3), (-3, 1, 2) 이 삼총사가 될 수 있으므로, 5를 return 합니다.
풀이=해답.
function solution(numbers) {
let count = 0;
for (let i = 0; i < numbers.length - 2; i += 1) {
for (let j = i + 1; j < numbers.length - 1; j += 1) {
for (let k = j + 1; k < numbers.length; k += 1) {
if (numbers[i] + numbers[j] + numbers[k] === 0) {
count++;
}
}
}
}
return count;
}
=> 삼중 반복문으로 그냥 모든 경우의 수를 순회하도록 하고, 3개 합이 0이 되는 경우엔 미리 초기화 시킨 count에 1씩 더하도록 하였다.
// 문제를 짧게 말하면 그냥 3개 더해서 0이 되는 횟수를 구하라는 의미이기 때문에 반복문을 계속 써주었다. 4개 더해서 0이면 그냥 횟수만 추가하면 되니 어려울 건 없었다.
'코딩테스트 > Java Script' 카테고리의 다른 글
코딩테스트 12(slice, sort, map) (0) | 2024.07.08 |
---|---|
코딩테스트 11(Math.max, Math.min, 아스키코드, s.charCodeAt, string.fromCharCode) (0) | 2024.07.02 |
코딩테스트 9(sort, break, slice) (0) | 2024.06.30 |
코딩테스트 8(filter) (0) | 2024.06.07 |
코딩테스트 7(배열 초기화, \n을 포함한 표현식 삽입, 유클리드 호제법-최대공약수, 최소공배수) (0) | 2024.06.05 |