본문 바로가기
codingtest

[programmers] 모스부호 (1), 문자열 뒤집기, 배열 뒤집기, 옷가게 할인 받기, 아이스 아메리카노

by 안자두 2023. 3. 21.

📝 [Lv0] 모스부호 (1)

👀 문제 설명

머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다. 그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 letter가 매개변수로 주어질 때, letter를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
모스부호는 다음과 같습니다.

morse = { 
    '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
    '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
    '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
    '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
    '-.--':'y','--..':'z'
}

 

🚨 제한 사항

  • 1 ≤ letter의 길이 ≤ 1,000
  • return값은 소문자입니다.
  • letter의 모스부호는 공백으로 나누어져 있습니다.
  • letter에 공백은 연속으로 두 개 이상 존재하지 않습니다.
  • 해독할 수 없는 편지는 주어지지 않습니다.
  • 편지의 시작과 끝에는 공백이 없습니다.

 

💻 입출력 예

letter  result
".... . .-.. .-.. ---"  "hello"
".--. -.-- - .... --- -."  "python"

 

✨ 풀이 설명

주어진 morse 객체를 그대로 사용하였다. 공백으로 구분된 문자열을 나눠 배열로 만든 다음, morse에서 각 코드를 key값으로 값을 구해주었다. 생성된 배열을 다시 문자열로 변경해 반환해 주었다.

 

🕵️‍♂️ 코드

function solution(letter) {
  const morse = {
    '.-': 'a', '-...': 'b', '-.-.': 'c', '-..': 'd', '.': 'e', '..-.': 'f',
    '--.': 'g', '....': 'h', '..': 'i', '.---': 'j', '-.-': 'k', '.-..': 'l',
    '--': 'm', '-.': 'n', '---': 'o', '.--.': 'p', '--.-': 'q', '.-.': 'r',
    '...': 's', '-': 't', '..-': 'u', '...-': 'v', '.--': 'w', '-..-': 'x',
    '-.--': 'y', '--..': 'z'
  }

  return letter.split(' ').map(code => morse[code]).join('');
}

 


📝 [Lv0] 문자열 뒤집기

👀 문제 설명

문자열 my_string이 매개변수로 주어집니다. my_string을 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요.

 

🚨 제한 사항

  • 1 ≤ my_string의 길이 ≤ 1,000

 

💻 입출력 예

my_string  return
"jaron"  "noraj"
"bread"  "daerb"

 

✨ 풀이 설명

배열을 뒤집는 reverse()라는 함수를 사용해 풀이하였다. 주어진 문자열을 해당 함수를 사용하기 위해 스프레드 문법으로 배열화한 후, 변경된 배열을 reverse()로 뒤집어준다. 그런 다음, join()을 이용해 다시 원래대로 문자열로 변경해 주었다.

 

🕵️‍♂️ 코드

function solution(my_string) {
  return [...my_string].reverse().join('');
}

 


📝 [Lv0] 배열 뒤집기

👀 문제 설명

정수가 들어 있는 배열 num_list가 매개변수로 주어집니다. num_list의 원소의 순서를 거꾸로 뒤집은 배열을 return하도록 solution 함수를 완성해주세요.

 

🚨 제한 사항

  • 1 ≤ num_list의 길이 ≤ 1,000
  • 0 ≤ num_list의 원소 ≤ 1,000

 

💻 입출력 예

num_list  result
[1, 2, 3, 4, 5] [5, 4, 3, 2, 1]
[1, 1, 1, 1, 1, 2] [2, 1, 1, 1, 1, 1]
[1, 0, 1, 1, 1, 3, 5] [5, 3, 1, 1, 1, 0, 1]

 

✨ 풀이 설명

위의 문제와 거의 유사하지만 이 문제가 훨씬 간단하다. 문자열을 배열화할 필요 없이 배열을 뒤집는 함수인 reverse()를 그대로 사용해 주면 되기 때문이다.

너무 간단하여 다른 분의 풀이를 보며 다른 방법들을 찾아보았다.
sort()를 이용한 분들을 보았는데, sort() 내부에서 -1(음수)을 반환하면 순서를 변경한다는 뜻이다. 따라서 아래 코드처럼 -1을 반환하도록 해주면, 모든 순서를 변경한다는 뜻이기 때문에 배열의 앞뒤가 뒤집히게 된다.

function solution(num_list) {
  return num_list.sort(() => -1);
}

 

여러 함수들을 알아두는 것이 보다 간단하고 빠르게 문제를 해결할 수 있는 지름길이 될 수 있는 것 같다.

 

🕵️‍♂️ 코드

function solution(num_list) {
  return num_list.reverse();
}

 


📝 [Lv0] 옷가게 할인 받기

👀 문제 설명

머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다.
구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.

 

🚨 제한 사항

  • 10 ≤ price ≤ 1,000,000
    • price는 10원 단위로(1의 자리가 0) 주어집니다.
  • 소수점 이하를 버린 정수를 return합니다.

 

💻 입출력 예

price result
150,000 142,500
580,000 464,000

 

✨ 풀이 설명

간단하게 조건문을 이용해 풀이할 수 있었다. 10e4는 간단하게 생각하면 10 * 10 ** 4라는 뜻이다. 즉, 100,000과 동일하다. Lv0 문제를 풀며 이것저것 많이 사용해 보는 것이 목적이기 때문에 생각나는 새로운 방법들을 많이 활용해보려고 한다.
더블 틸드(~~) 역시 마찬가지이다. 
더블 틸드는 말 그대로 비트 연산자 중 NOT과 동일한 기능을 하는 틸드(~) 연산자를 두 번 사용한 것이다. 
이 더블 틸드를 사용하게 되면 양수의 경우에는 Math.floor()와 동일한 기능을, 음수의 경우에는 Math.ceil()과 동일한 기능을 하게 된다.
속도 측면에서도 Math.floor()를 사용하는 것보다 빠르다고 한다. 하지만 가독성을 생각하면 Math.floor()를 사용하는 것이 더 좋을 것이다.

 

🕵️‍♂️ 코드

 
function solution(price) {
  if (price < 10e4) return price;
  if (price < 10e4 * 3) return ~~(price * 0.95);
  if (price < 10e4 * 5) return ~~(price * 0.9);
  return ~~(price * 0.8);
}

📝 [Lv0] 아이스 아메리카노

👀 문제 설명

머쓱이는 추운 날에도 아이스 아메리카노만 마십니다. 아이스 아메리카노는 한잔에 5,500원입니다. 머쓱이가 가지고 있는 돈 money가 매개변수로 주어질 때, 머쓱이가 최대로 마실 수 있는 아메리카노의 잔 수와 남는 돈을 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

 

🚨 제한 사항

  • 0 < money ≤ 1,000,000

 

💻 입출력 예

money result
5,500 [1, 0]
15,000 [2, 4000]

 

✨ 풀이 설명

얼죽아는 조용히 고개를 들어 서로를 확인해 주세요

금액을 상수로 선언한 후, 사용하였다. 이렇게 하면, 금액이 변경되어도 해당 변수만을 변경할 수 있다는 장점이 있다. 프로젝트를 할 때를 생각해 문제를 풀어보았다.

 

🕵️‍♂️ 코드

function solution(money) {
  const PRICE = 5500;
  const cnt = ~~(money / PRICE);
  const change = money % PRICE;
  return [cnt, change];
}

 

728x90