본문 바로가기

알고리즘

프로그래머스 자바스크립트 알고리즘 스터디 [문21~문24]

728x90

문제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()을 최종적으로 씌워준다.

728x90