코딩테스트 리뷰(JS/레벨1)

iskra·2023년 6월 1일
0

2023/06/01
프로그래머스 자바스크립트/레벨1/문제 리뷰

1. 시저 암호

문제 설명

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

제한 조건

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

코드

const upperString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const lowerString = "abcdefghijklmnopqrstuvwxyz";

function solution(s, n) {
    return s.split('').map(char => {
        if (char === ' ') return char;
        const str = char === char.toUpperCase() ? upperString : lowerString;
        let index = str.indexOf(char) + n;
        if (index >= str.length) index -= str.length;
        return str[index];
    }).join('');
}

코드리뷰

  1. split('')를 이용하여 문자열을 배열로 변환합니다. 이 배열은 각 문자가 배열의 요소로 구성됩니다.

  2. map 메서드를 이용하여 배열의 각 요소에 대해 다음의 연산을 수행합니다:

    • 공백 문자는 그대로 반환합니다.
    • 해당 문자가 대문자인지 소문자인지 판별하여, 해당하는 문자열 str를 결정합니다.
    • 문자열 str에서 해당 문자의 인덱스를 찾고, 이를 n만큼 더합니다.
    • 만약 이렇게 계산한 인덱스가 문자열 str의 길이 이상이면, str의 길이만큼 빼줍니다. 이는 알파벳이 원형으로 연결되어 있음을 의미합니다. (즉, 'z' 다음에는 'a'가 오며, 'Z' 다음에는 'A'가 옵니다)
    • 계산한 인덱스에 해당하는 문자를 반환합니다.
  3. join('')을 이용하여 배열을 다시 문자열로 변환합니다.

이렇게 작성된 solution 함수는 주어진 문자열 s를 n만큼 시저 암호화한 결과를 반환합니다.

2. 수박수박수박수박수박수?

문제 설명

문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.

제한 조건

  • n은 길이 10,000이하인 자연수입니다.

코드 1

function solution(n) {
    return Array.from({length: n}, (_, i) => i % 2 === 0 ? '수' : '박').join('');
}

코드 2

function solution(n) {
    return "수박".repeat(n/2)+(n%2 === 1 ? "수" : "")
}

코드 1 리뷰

  1. Array.from({length: n})를 통해 길이가 n인 새로운 배열을 생성합니다. 이 배열의 각 요소는 undefined입니다.

  2. map 메서드를 사용하여 배열의 각 요소에 대해 다음의 연산을 수행합니다:

    • 인덱스 i가 짝수일 경우 '수'를, 홀수일 경우 '박'을 반환합니다. 이는 패턴 "수박수박수박..."을 만드는 과정입니다.
  3. join('')을 이용하여 배열을 다시 문자열로 변환합니다. 이렇게 하면 "수박수박수박..." 패턴을 유지하면서 주어진 길이 n에 맞는 문자열이 반환됩니다.

참고

Array.from 매시드에 대한 이해

Array.from 메서드는 배열 형태의 객체나 반복 가능한 객체를 얕게 복사하여 새로운 Array 객체를 만듭니다. 이 메서드는 두 개의 선택적 인수를 가집니다:

  1. mapFn: 모든 배열 요소에 대해 호출할 맵 함수입니다. 이 함수는 생성된 배열의 각 요소에 대해 호출되며, 각 요소의 값을 변환하는 데 사용할 수 있습니다.
  2. thisArg: mapFn을 실행할 때 this로 사용할 값입니다.

기본 사용 방법

Array.from('foo'); 
// ["f", "o", "o"]

문자열을 배열로 변환하는데 유용하게 사용할 수 있습니다

mapFn 인자를 사용하는 방법

Array.from([1, 2, 3], x => x + x); 
// [2, 4, 6]

위 코드에서는 Array.from 메서드를 이용해 기존 배열 [1, 2, 3]의 각 요소를 두 배로 만드는 새 배열을 생성합니다.

배열 형태의 객체를 배열로 변환하는 방법

const obj = { 0: 'a', 1: 'b', 2: 'c', length: 3};
Array.from(obj); 
// ["a", "b", "c"]

위 코드에서는 length 프로퍼티를 가지는 객체를 배열로 변환하고 있습니다. 이렇게 Array.from 메서드는 배열이 아닌 객체나 집합을 배열로 변환하는 데 유용하게 사용될 수 있습니다.

특정 길이의 배열 생성 방법

Array.from({length: 5}, (_, i) => i); 
// [0, 1, 2, 3, 4]

이 코드는 길이가 5이며 각 요소가 그 인덱스 값과 동일한 배열을 생성합니다.
Array.from 메서드는 이와 같은 다양한 경우에 유용하게 사용할 수 있습니다.

여기에서 _는 매개변수 위치에는 있지만 실제로는 사용되지 않는 매개변수를 의미합니다. 이러한 경우 보통 _ 기호를 사용해 "이 매개변수는 여기에는 있지만, 실제로는 사용되지 않는다"라는 것을 명확히 표시합니다.

profile
프로그래밍 개인공부 공간입니다.

0개의 댓글