본문 바로가기

JS 코테

<Javascript-CT> 기초 DAY 13 - 4개의 주사위를 던졌을 때

 

문제1
	boolean 변수 x1, x2, x3, x4가 매개변수로 주어질 때, 
    다음의 식의 true/false를 return 하는 solution 함수를 작성해 주세요.
    
    입출력 예
    x1	x2	x3	x4	result
    false	true	true	true	true
    true	false	false	false	false
    
    ∨과 ∧의 진리표는 다음과 같습니다.
    x	y	x ∨ y	x ∧ y
    T	T	T	  T
    T	F	T	  F
    F	T	T	  F
    F	F	F

문제2
	1부터 6까지 숫자가 적힌 주사위가 네 개 있습니다. 네 주사위를 굴렸을 때 나온 숫자에 따라 다음과 같은 점수를 얻습니다.
    네 주사위에서 나온 숫자가 모두 p로 같다면 1111 × p점을 얻습니다.
    세 주사위에서 나온 숫자가 p로 같고 나머지 다른 주사위에서 나온 숫자가 q(p ≠ q)라면 (10 × p + q)2 점을 얻습니다.
    주사위가 두 개씩 같은 값이 나오고, 나온 숫자를 각각 p, q(p ≠ q)라고 한다면 (p + q) × |p - q|점을 얻습니다.
    어느 두 주사위에서 나온 숫자가 p로 같고 나머지 두 주사위에서 나온 숫자가 각각 p와 다른 q, r(q ≠ r)이라면 q × r점을 얻습니다.
    네 주사위에 적힌 숫자가 모두 다르다면 나온 숫자 중 가장 작은 숫자 만큼의 점수를 얻습니다.
    네 주사위를 굴렸을 때 나온 숫자가 정수 매개변수 a, b, c, d로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.

문제3
	문자열 my_string과 정수 배열 index_list가 매개변수로 주어집니다. 
    my_string의 index_list의 원소들에 해당하는 인덱스의 글자들을 
    순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.

문제4
	음이 아닌 정수를 9로 나눈 나머지는 그 정수의 각 자리 숫자의 합을 9로 나눈 나머지와 같은 것이 알려져 있습니다.
    이 사실을 이용하여 음이 아닌 정수가 문자열 number로 주어질 때, 
    이 정수를 9로 나눈 나머지를 return 하는 solution 함수를 작성해주세요.
    
문제5
	문자열 my_string과 이차원 정수 배열 queries가 매개변수로 주어집니다. 
    queries의 원소는 [s, e] 형태로, my_string의 인덱스 s부터 인덱스 e까지를 뒤집으라는 의미입니다. 
    my_string에 queries의 명령을 순서대로 처리한 후의 문자열을 return 하는 solution 함수를 작성해 주세요.
    
    입출력 예
    my_string	queries	result
    "rermgorpsam"	[[2, 3], [0, 7], [5, 9], [6, 10]]	"programmers"

 

 

🕹️ 문제를 풀기위해 알면 좋을 것 

- Array.reverse()

배열의 순서를 반전하는 메소드이다.

 

- Math.abs()

 숫자의 절대 값을 반환합니다.

 

- Math.pow(base, exponent)

base에 exponent 만큼 제곱해서 리턴해준다

 

- Math.min()

인수로 받은 숫자들 중 가장작은 수를 반환한다.
*** 개별 숫자를 인수로 받는다

 

내 답안지

문제 1

function solution(x1, x2, x3, x4) {
   const result = (x1 || x2) && (x3 || x4)
   return result
}

뭔 소린가 했는데 진리표까지 보고나서 or, and 연산자라는걸 알아챘다.

문제를 잘 읽자!

 

 

문제2

무엇들을 고려해야할지 부터 생각해야 한다.

나는 일단 1. 주사위의 결과들을 배열에 담고 비교하려고 생각했다.

2. every로 모두 같은 경우를 검사

3. count를 두고 같은 수가 있는지 확인

4. 그런데 어떤 수가 여러개인지 확인을 어떻게 할지.... 에서 막혔다ㅜㅠ

 

첫 시도

function solution(a, b, c, d) {
  let result = 0;
  let count = 0;
  let tempArr = [];
  const arr = [a, b, c, d];
  // 모두 같은 수라면
  if (arr.every((val) => val === a)) {
    result = 1111 * a;
  }

  
}
// value와 같은 값을 가진 인덱스 반환
function findIndex(arr, value) {
  return arr
    .map((item, index) => (item === value ? index : -1))
    .filter((index) => index !== -1);
}

 

 

객체에 각 숫자가 몇 번씩 등장하는지 담은 다음 생각하라는 힌트를 얻었다.

function solution(a, b, c, d) {
  const arr = [a, b, c, d];
  const counts = {};

  if (arr.every((val) => val === a)) {
    return a * 1111;
  }

  for (const num of arr) {
    counts[num] = (counts[num] || 0) + 1;
  }

  const entryArr = Object.entries(counts).sort((a, b) => b[1] - a[1]);
  console.log("엔트리 정렬 : ");
  console.log(entryArr);

  if (entryArr.length === 2) {
    // 3개가 같은숫자
    if (entryArr[0][1] === 3) {
        const p =  Number(entryArr[0][0])
        const q = Number(entryArr[1][0])
      return Math.pow((10 * p + q),2)
    
      // 두개씩 같은숫자
    } else if (entryArr[0][1] === 2) {
      return (
        (Number(entryArr[0][0]) + Number(entryArr[1][0])) *
        Math.abs(Number(entryArr[0][0]) - Number(entryArr[1][0]))
      );
    }
  }

  if (entryArr.length === 3) {
    return Number(entryArr[1][0]) * Number(entryArr[2][0]);
  }
  if (entryArr.length === 4) {
    entryArr.sort((a, b) => Number(a[0][0]) - Number(b[1][0]))
   return Number( entryArr[0][1])
  }
}

 

 

Math.min을 몰라서 삽질하다가 나온 마지막 답

function solution(a, b, c, d) {
  const arr = [a, b, c, d];
  const counts = {};

  if (arr.every((val) => val === a)) {
    return a * 1111;
  }

  for (const num of arr) {
    counts[num] = (counts[num] || 0) + 1;
  }

  const entryArr = Object.entries(counts).sort((a, b) => b[1] - a[1]);

  if (entryArr.length === 2) {
    // 3개가 같은숫자
    if (entryArr[0][1] === 3) {
      const p =  Number(entryArr[0][0])
        const q = Number(entryArr[1][0])
      return Math.pow((10 * p + q),2)
    
      // 두개씩 같은숫자
    } else if (entryArr[0][1] === 2) {
      return (
        (Number(entryArr[0][0]) + Number(entryArr[1][0])) *
        Math.abs(Number(entryArr[0][0]) - Number(entryArr[1][0]))
      );
    }
  }

  if(entryArr.length === 3){
    return Number(entryArr[1][0]) * Number(entryArr[2][0])
  }
  if(entryArr.length === 4){
        return Math.min(...arr)
  }
}

 

 

 

문제3

 

function solution(my_string, index_list) {

    const str = my_string.split('')
    const result = index_list.map(index => str[index]).join('');
    
    return result
}

이 문제가 제일 어려웠는데 다른사람 답을 보니 그냥 단순하게 비교해서

비교연산자랑 조건문을 같이 쓴게 가독성이 훨씬 좋더라ㅠ

안될때는 너무 깊게 생각하지말고 되는대로 하는것도 좋은 방법같다

 

 

 

문제 4

 

function solution(number) {
    const temp = number.split('')
    const sum = temp.reduce((acc, cur) => Number(acc)+Number(cur))
    
    return sum%9
}

 

 

문제 5

내 첫 시도

function solution(my_string, queries) {
    let str = my_string.split('')
    let temp1 = []
    let temp2 = []
    let temp3 =[]
    for(let i=0; i <queries.length; i ++){
        const query = queries[i]
        const [s,e] = query
         temp1 = str.slice(0, s)
         temp2 = str.slice(s, e+1).reverse()
         temp3 = str.slice(e+1, str.length)
        
        str = temp1 + temp2 +temp3
    }
    let result = str.join('')
        //temp1.join('') + temp2.join('') + temp3.join('')
    
    return result
}

ㅇ.... 그런데 for 문 안에서 기존 문자열을 덮어씌우지 않고 있기 때문에 틀린 답이 되었다zzz

 

수정 후 답안

function solution(my_string, queries) {
    let str = my_string.split('')
    let temp1 = []
    let temp2 = []
    let temp3 =[]
    for(let i=0; i <queries.length; i ++){
        const query = queries[i]
        const [s,e] = query
        temp1 = str.slice(0, s)
         temp2 = str.slice(s, e+1).reverse()
         temp3 = str.slice(e+1, str.length)
        
        str = [...temp1, ...temp2, ...temp3]
        
    }

    return  str.join('')
}
728x90

'JS 코테' 카테고리의 다른 글

<Javascript-CT> 기초 DAY 15  (0) 2025.05.05
<Javascript-CT> 기초 DAY 14  (0) 2025.05.04
<Javascript-CT> 기초 DAY 12  (0) 2025.04.28
<Javascript-CT> 기초 DAY 11  (0) 2025.04.28
<Javascript-CT> 기초 DAY 10  (0) 2025.04.28