5월 2주차 코딩 테스트 문제 풀이 리뷰

DANO PARK·2022년 5월 13일
0
post-thumbnail

Programmers JavaScript Lv.1 [이상한 문자 만들기]

문제설명

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

제한사항

  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
  • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

입출력 예

sreturn
"try hello world""TrY HeLlO WoRlD"

입출력 예 설명

"try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.

제출답안

function solution(s) {
    return s.split(" ").map(a => a.split("").map((b, idx) => idx % 2 === 0 ? b.toUpperCase() : b.toLowerCase()).join('')).join(' ');
}

풀이

"try hello world"를 예로 들어보자. 공백을 기준으로 짝수 홀수가 나누어진다. 따라서 split()로 문장을 단어로 한 번 나누고, 단어를 글자로 한 번 더 나눠야한다. 이것을 다시 이어 붙이려면 join() 역시 두 번 필요하다. 또한 그 내부의 map() 또한 두 개 필요하다. 마지막 map() 메서드에서 짝수와 홀수를 나눠 각각 대문자와 소문자로 구분해주면 답안을 완성할 수 있다.


Programmers JavaScript Lv.1 [하샤드 수]

문제설명

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

제한 조건

  • x는 1 이상, 10000 이하인 정수입니다.

입출력 예

arrreturn
10true
12true
11false
13false

입출력 예 설명

입출력 예 #1
10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다.

입출력 예 #2
12의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다.

입출력 예 #3
11의 모든 자릿수의 합은 2입니다. 11은 2로 나누어 떨어지지 않으므로 11는 하샤드 수가 아닙니다.

입출력 예 #4
13의 모든 자릿수의 합은 4입니다. 13은 4로 나누어 떨어지지 않으므로 13은 하샤드 수가 아닙니다.

제출답안

function solution(x) {
    var answer = true;
    var arr = String(x).split("").reduce((a, b) => Number(a) + Number(b));
    answer = x % arr === 0 ? true : false;
    return answer;
}

풀이

split() 메서드는 string 값이어야 사용할 수 있다. x를 string 값으로 만들고 그것을 배열로 나눈 뒤 reduce()를 통해 이것을 더해야한다. 그러나 x의 값은 현재 string 값이기 때문에 number 값으로 변환해야한다.


Programmers JavaScript Lv.1 [시저 암호]

문제설명

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

제한조건

  • 공백은 아무리 밀어도 공백입니다.
  • s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
  • s의 길이는 8000이하입니다.
  • n은 1 이상, 25이하인 자연수입니다.

입출력 예

snresult
"AB"1"BC"
"z"1"a"
"a B z"4"e F d"

제출답안

function solution(s, n) {
    return s.split("").map((e)=>{
        if (e == " "){
            return e;
        }
        const a = e.charCodeAt()
        return e.toUpperCase().charCodeAt()+n > 90 
            ? String.fromCharCode(a+n-26) 
            : String.fromCharCode(a+n)
    }).join('');
}

풀이

아스키코드를 사용해서 문제를 풀어야 한다.

profile
단오해서 단호박!

0개의 댓글