프로그래머스

프로그래머스11차

ture403 2023. 5. 31. 22:41

- Frederick Philips Brooks
Mythical Man-Month 저자
728x90
반응형

가위 바위 보

문제

가위는 2 바위는 0 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열 rsp가 매개변수로 주어질 때, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return하도록 solution 함수를 완성해보세요.

 

정답풀이

function solution(rsp) {
    const rspWin = { 2 : 0, 0 : 5, 5 : 2 };
    return [...rsp].map(x => rspWin[x]).join('')
}

함수는 rspWin이라는 객체를 선언하고 초기값을 할당합니다. rspWin 객체는 2, 0, 5 세 가지 속성을 가지며, 각 속성은 해당하는 가위, 바위, 보의 이길 경우에 대응하는 값으로 설정되어 있습니다.

함수는 rsp 문자열을 배열로 변환한 후 각 요소에 대해 rspWin 객체에서 값을 찾아 매핑합니다. 이후, 매핑된 결과를 문자열로 결합하여 반환합니다.

즉, rsp 문자열의 각 문자에 대해 rspWin 객체에서 값을 찾아서 매핑하고, 매핑된 결과들을 순서대로 이어붙인 문자열을 반환합니다. 이는 rsp 문자열을 해당하는 가위, 바위, 보의 이길 경우에 대응하는 숫자로 변환한 결과를 나타냅니다.

 

암호 해독

문제

군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.

암호화된 문자열 cipher를 주고받습니다.
그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다.
문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요.

 

문제풀이

function solution(cipher, code) {
  var answer = "";

  for (let i = 0; i < cipher.length; i++) {
    if ((i + 1) % code === 0) {
      answer += cipher[i];
    }
  }
  return answer;
}

 

함수는 결과를 저장하기 위한 빈 문자열 answer를 선언합니다.

다음으로, cipher 문자열을 순회하는 반복문을 실행합니다. 반복문에서는 현재 인덱스 i에 1을 더한 값이 code로 나누어 떨어지는지 확인합니다. 만약 나누어 떨어진다면 현재 인덱스에 해당하는 cipher 문자를 answer에 추가합니다.

마지막으로, answer 문자열을 반환합니다. 이 문자열은 cipher 문자열에서 code로 나누어 떨어지는 인덱스에 해당하는 문자들을 이어붙인 결과입니다.

세균 증식

문제

어떤 세균은 1시간에 두배만큼 증식한다고 합니다. 처음 세균의 마리수 n과 경과한 시간 t가 매개변수로 주어질 때 t시간 후 세균의 수를 return하도록 solution 함수를 완성해주세요.

 

정답풀이

function solution(n, t) {
  for ( let i = 1; i <= t; i++ ) {
    n *= 2
  }
    return n;
}

함수는 반복문을 사용하여 n을 t번 2배로 곱합니다. 반복문은 1부터 t까지 실행되며, 매 반복마다 n에 2를 곱하여 업데이트합니다.

반복문이 모두 실행된 후 최종적으로 n을 반환합니다. 이 값은 n을 t번 2배로 곱한 결과를 나타냅니다.

 

대문자와 소문자

문제

문자열 my_string이 매개변수로 주어질 때, 대문자는 소문자로 소문자는 대문자로 변환한 문자열을 return하도록 solution 함수를 완성해주세요.

정답풀이

function solution(my_string) {
    let answer = '';
    
    for(let i = 0; i < my_string.length; i++) {
        let ch = my_string.charAt(i);
        
        if('a'.charCodeAt() <= ch.charCodeAt() && ch.charCodeAt() <= 'z'.charCodeAt()) {
            answer += ch.toUpperCase();
        }else if('A'.charCodeAt() <= ch.charCodeAt() && ch.charCodeAt() <= 'Z'.charCodeAt()) {
            answer += ch.toLowerCase();
        } else {
            answer += ch;
        }
    }
    
    return answer;
}

제공된 코드는 solution이라는 함수입니다. 이 함수는 하나의 매개변수 my_string을 받습니다.

함수는 결과를 저장하기 위한 빈 문자열 answer를 선언합니다.

다음으로, my_string 문자열을 순회하는 반복문을 실행합니다. 반복문에서는 현재 인덱스에 해당하는 문자를 ch 변수에 할당합니다.

ch의 문자 코드값이 소문자 알파벳의 문자 코드 범위에 속하는지 확인합니다. 만약 속한다면, 해당 문자를 대문자로 변환하여 answer에 추가합니다.

그렇지 않고, ch의 문자 코드값이 대문자 알파벳의 문자 코드 범위에 속하는지 확인합니다. 만약 속한다면, 해당 문자를 소문자로 변환하여 answer에 추가합니다.

위 두 조건에 모두 해당하지 않는 경우, 즉 알파벳이 아닌 경우, ch를 그대로 answer에 추가합니다.

마지막으로, 변환된 answer 문자열을 반환합니다. 이 문자열은 my_string의 알파벳 문자들을 대소문자로 변환한 결과를 나타냅니다.