본문 바로가기
codingtest

[programmers] 가위 바위 보, 모음 제거, 점의 위치 구하기, 개미 군단, 순서쌍의 개수

by 안자두 2023. 3. 14.

📝 [Lv0] 가위 바위 보

👀 문제 설명

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

 

🚨 제한 사항

  • 0 < rsp의 길이 ≤ 100
  • rsp와 길이가 같은 문자열을 return 합니다.
  • rsp는 숫자 0, 2, 5로 이루어져 있습니다.

 

💻 입출력 예

rsp result
"2" "0"
"205" "052"

 

✨ 풀이 설명

세 가지를 각각 key로, 각각에 이기는 값을 value로 하여 객체를 만들었다.

rsp를 map()으로 반복문을 돌면서 만들어준 winner 객체에서 value를 찾아 생긴 배열을 반환해 주었다.
반환된 배열을 다시 문자열로 만들면 결과 문자열이 만들어진다. 

 

🕵️‍♂️ 코드

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

 


📝 [Lv0] 모음 제거

👀 문제 설명

영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다. 문자열 my_string이 매개변수로 주어질 때 모음을 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

 

🚨 제한 사항

  • my_string은 소문자와 공백으로 이루어져 있습니다.
  • 1 ≤ my_string의 길이 ≤ 1,000

 

💻 입출력 예

my_string result
"bus" "bs"
"nice to meet you" "nc t mt y"

 

✨ 풀이 설명

모음들을 배열로 만든 다음, my_string을 배열화하여 filter()를 사용해 주었다. 각 문자가 vowel에 포함되어 있지 않을 때에만 true를 반환해, 자음들만 남도록 해주었다. 자음들의 배열을 join()으로 문자열로 만들어 반환해 주면 끝!

 

🕵️‍♂️ 코드

function solution(my_string) {
  const vowel = ['a', 'e', 'i', 'o', 'u'];
  return [...my_string].filter(char => !vowel.includes(char)).join('');
}

 


📝 [Lv0] 점의 위치 구하기

👀 문제 설명

사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다.

  • x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다.
  • x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다.
  • x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다.
  • x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다.

x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.

 

🚨 제한 사항

  • dot의 길이 = 2
  • dot[0]은 x좌표를, dot[1]은 y좌표를 나타냅니다
  • -500 ≤ dot의 원소 ≤ 500
  • dot의 원소는 0이 아닙니다.

 

💻 입출력 예

dot result
[2, 4] 1
[-7, 9] 2

 

✨ 풀이 설명

삼항 연산자를 사용해 각 원소가 0보다 큰지 확인해 주었다.
만약 x가 0보다 크다면 빨간 : 앞쪽, 작다면 뒤쪽으로 넘어간다.
확인하기 편하게 각 연산자 페어별로 색깔로 구분해 두었다.

 

🕵️‍♂️ 코드

function solution(dot) {
  const [x, y] = dot;
  return x > 0 ? y > 0 ? 1 : 4 : y > 0 ? 2 : 3;
}

 


📝 [Lv0] 개미 군단

👀 문제 설명

개미 군단이 사냥을 나가려고 합니다. 개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력을 가지고 있습니다. 예를 들어 체력 23의 여치를 사냥하려고 할 때, 일개미 23마리를 데리고 가도 되지만, 장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. 사냥감의 체력 hp가 매개변수로 주어질 때, 사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 return하도록 solution 함수를 완성해주세요.

 

🚨 제한 사항

  • hp는 자연수입니다.
  • 0 ≤ hp ≤ 1000

 

💻 입출력 예

hp result
23 5
24 6
999 201

 

✨ 풀이 설명

동전 문제...? 같다는 생각을 했다. 가장 비용이 큰 장군개미부터 데리고 가고, 남은 hp로 병정개미를, 그다음에도 남는다면 일개미로 채워 체력을 딱 맞게 구성할 수 있다.

reduce를 사용해서 각 개미를 큰 비용이 드는 순서대로 정렬한 배열을 반복하며 몫은 개미 수로, 나머지는 다시 hp로 재할당해 주었다.

 

🕵️‍♂️ 코드

function solution(hp) {
  return [5, 3, 1].reduce((total, ant) => {
    total += Math.floor(hp / ant);
    hp %= ant;
    return total;
  }, 0);
}

 


📝 [Lv0] 순서쌍의 개수

👀 문제 설명

순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.

 

🚨 제한 사항

  • 1 ≤ n ≤ 1,000,000

 

💻 입출력 예

n result
20 6
100 9

 

✨ 풀이 설명

순서쌍이 나오려면 해당 수의 약수를 구하면 된다. 이전 문제와도 비슷한 문제이다.
약수를 구하면 각 약수의 페어를 알 수 있기 때문이다. 이번에는 저번과는 다른 방식을 풀어보았다.

n길이만큼의 배열을 만들어 filter()를 사용해 n이 인덱스 + 1 한 값으로 나누어 떨어지는 것들은 모두 약수임을 이용했다.
filter()의 길이를 반환해 주면 약수의 개수 즉, 순서쌍의 개수를 반환해 준 결과와 동일하다.

다만 시간 효율성에서는 저번에 푼 코드가 훨씬 좋다.
(O(logN) O(N)의 차이)

 

🕵️‍♂️ 코드

function solution(n) {
  return new Array(n).fill().filter((_, i) => !(n % (i + 1))).length;
}

 

728x90