프로그래머스 자바스크립트 알고리즘 스터디 [문21~문24]
문제21: 이상한 문자열 만들기
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한 사항
- 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
- 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
나의코드)
function solution(s) {
var answer = [];
let arr1=s.split(" ");
for(i=0;i<arr1.length;i++){
for(j=0;j<arr1[i].length;j++){
if(j%2==0){
answer.push(arr1[i][j].toUpperCase())
}else{
answer.push(arr1[i][j].toLowerCase())
}
}answer.push(" ");
}answer.pop()
return answer.join("");
}
나의풀이)
이 문제를 제대로 풀기 위해서는 문자열을 어느정도 자유자재로 다룰 수 있어야 한다.
let s = "try hello world"
let arr1 =s.split(" ");//문자열을 공백을 기준으로 나누어 배열에 넣음
console.log(arr1)//['try','hello','world']
console.log(arr1[0])//try
console.log(arr1[0][0])//t
console.log(arr1[1])//hello
console.log(arr1[1][0])//h
arr1.push(" ")//배열의 맨 마지막에 " " 공백 추가
arr1.pop()//배열의 맨 마지막 요소 제거(공백 제거)
console.log(arr1)
console.log(arr1.join(" "))// 모든 요소들을 공백을 기준으로 이어줌
문제22: 자릿수 더하기
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.제한사항
- N의 범위 : 100,000,000 이하의 자연수
나의 코드)
function solution(n)
{
var answer = 0;
let str=n.toString()
let arr1=str.split("")
for(i=0;i<arr1.length;i++){
answer=answer+Number(arr1[i])
}
return answer;
}
나의 풀이)
숫자를 받아와서 toSting()을 통해 문자로 변환을 시켜준 뒤(배열에 담기 위함) arr1에 하나씩 담기 위해서 split("")을 사용해 하나씩 arr1에 담아준다. for문을 돌려가며 answer에 각 arr1에 담긴 요소들을 하나씩 더해주면 최종적으로 모든 index의 값들의 합이 answer에 저장된다
문제23: 자연수 뒤집어 배열로 만들기
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.제한 조건
- n은 10,000,000,000이하인 자연수입니다.
나의 코드)
function solution(n) {
var answer = [];
let arr1 = n.toString().split("")
for(i=arr1.length-1;i>=0;i--){
answer.push(Number(arr1[i]))
}
return answer
}
나의 풀이)
먼저 숫자를 toSting()을 통해 문자열로 바꿔준다음 .split("")을 이용해 arr1에 하나씩 담아준다. i가 arr1.length-1부터 i가 0까지 하니씩 작아지면서 arr[i]를 빈 배열인 answer에 하나씩 담아준다. 이 때 원래 문자열로 변환했던 arr[i]를 다시 숫자로 변환시켜 넣어야 하기 때문에 Number()를 씌워 문자열을 숫자로 바꿔준다. 이 과정을 생력하면 ["5","4","3","2","1"]과 같이 담겨 오류가 발생한다.
문제24: 자연수 뒤집어 배열로 만들기
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
제한 조건
- n은 1이상 8000000000 이하인 자연수입니다.
나의 코드)
function solution(n) {
let answer =""
let Arr=n.toString().split("").sort(function(a,b){return b-a})
answer = Number(Arr.join(""));
return answer;
}
나의 풀이)
숫자 n을 받아오기 때문에 toString()을 사용하여 문자열로 바꿔준 뒤, split("")을 사용하여 배열에 들어가게 한다.
.sort(function(a,b){return b-a})는 내림차순으로 배열을 새롭게 정렬해주고, sort()의 괄호 안을 비워두면 오른차순으로 정렬된다. answer는 배열이 아니라 문자로 내보내져야하기 때문에 .join("")을 사용하여 공백없이 이어주고 문자열이 아니라 숫자 형식으로 다시 바꿔줘야하기 때문에 Number()을 최종적으로 씌워준다.