간단한 논리 연산
문제
boolean 변수 x1
, x2
, x3
, x4
가 매개변수로 주어질 때, 다음의 식의 true/false를 return 하는 solution 함수를 작성해 주세요.
(x1
∨ x2
) ∧ (x3
∨ x4
)
소스 코드
const solution = (x1, x2, x3, x4) => {
const operation1 = (x1 || x2);
const operation2 = (x3 || x4);
return operation1 && operation2;
};
주사위 게임 3
문제
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 함수를 작성해 주세요.
- 제한사항
- a, b, c, d는 1 이상 6 이하의 정수입니다.
(x1
∨ x2
) ∧ (x3
∨ x4
)
소스 코드
const solution = (a, b, c, d) => {
let obj = {};
[a, b, c, d].forEach(num => {
obj[num] = (obj[num] || 0) + 1;
});
let entries = Object.entries(obj);
entries.sort((a, b) => b[1] - a[1]);
let sortedKeys = entries.map(entry => entry[0]);
if (obj[sortedKeys[0]] === 4) {
return Number(sortedKeys[0]) * 1111;
} else if (obj[sortedKeys[0]] === 3) {
return (10 * Number(sortedKeys[0]) + Number(sortedKeys[1])) ** 2;
} else if (obj[sortedKeys[0]] === 2 && sortedKeys.length === 2) {
return (Number(sortedKeys[0]) + Number(sortedKeys[1])) * Math.abs(Number(sortedKeys[0]) - Number(sortedKeys[1]));
} else if (obj[sortedKeys[0]] === 2 && sortedKeys.length === 3) {
return Number(sortedKeys[1]) * Number(sortedKeys[2]);
} else {
return Number(sortedKeys.sort((a, b) => a - b)[0]);
}
};
obj
변수에 각 숫자 개수를 세어준 다음sortedKeys
로value
개수가 많은 순서대로key
를 정렬해 주었다. 그리고 나온 숫자에 따라 계산식을 적용하였다.
글자 이어 붙여 문자열 만들기
문제
문자열 my_string
과 정수 배열 index_list
가 매개변수로 주어집니다. my_string
의 index_list
의 원소들에 해당하는 인덱스의 글자들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
- 제한사항
- 1 ≤
my_string
의 길이 ≤ 1,000 my_string
의 원소는 영소문자로 이루어져 있습니다.- 1 ≤
index_list
의 길이 ≤ 1,000 - 0 ≤
ndex_list
의 원소 <my_string
의 길이
- 1 ≤
소스 코드
const solution = (my_string, index_list) => {
let answer = '';
const string = my_string.split('');
for (const item of index_list) {
answer += string[item];
}
return answer;
};
9로 나눈 나머지
문제
음이 아닌 정수를 9로 나눈 나머지는 그 정수의 각 자리 숫자의 합을 9로 나눈 나머지와 같은 것이 알려져 있습니다.
이 사실을 이용하여 음이 아닌 정수가 문자열 number
로 주어질 때, 이 정수를 9로 나눈 나머지를 return 하는 solution 함수를 작성해주세요.
- 제한사항
- 1 ≤
number
의 길이 ≤ 100,000 number
의 원소는 숫자로만 이루어져 있습니다.number
는 정수 0이 아니라면 숫자 '0'으로 시작하지 않습니다.
- 1 ≤
소스 코드
const solution = number => {
const array = number.split('').map(Number);
let sum = 0
array.map(item => sum += item);
return Number(sum) % 9;
};
문자열 여러 번 뒤집기
문제
문자열 my_string
과 이차원 정수 배열 queries
가 매개변수로 주어집니다. queries
의 원소는 [s, e] 형태로, my_string
의 인덱스 s부터 인덱스 e까지를 뒤집으라는 의미입니다. my_string
에 queries
의 명령을 순서대로 처리한 후의 문자열을 return 하는 solution 함수를 작성해 주세요.
(x1
∨ x2
) ∧ (x3
∨ x4
)
소스 코드
const solution = (my_string, queries) => {
const array = my_string.split('');
queries.map(item => {
for (let i = 0; i < (item[1] - item[0]) / 2; i++){
const temp = array[item[1] - i];
array[item[1] - i] = array[item[0] + i];
array[item[0] + i] = temp;
}
});
return array.join('');
};
Ghost