...
728x90
반응형
프로그래머스 문제풀기 22일차.
1. 3x 마을 사람들은 3을 저주의 숫자라고 생각하기 때문에 3의 배수와 숫자 3을 사용하지 않습니다. 3x 마을 사람들의 숫자는 다음과 같습니다.
10진법 | 3X 마을에서 쓰는 숫자 | 10진법 | 3X 마을에서 쓰는 숫자 |
1 | 1 | 6 | 8 |
2 | 2 | 7 | 10 |
3 | 4 | 8 | 11 |
4 | 5 | 9 | 14 |
5 | 7 | 10 | 16 |
정수 n이 매개변수로 주어질 때, n을 3x 마을에서 사용하는 숫자로 바꿔 return하도록 solution 함수를 완성해주세요.
function solution(n) {
let num = 0;
for(let i=1; i<=n; i++){
num++;
while(num.toString().includes(3) || num % 3 == 0){
num++;
}
}
return num;
}
2. 점 네 개의 좌표를 담은 이차원 배열 dots가 다음과 같이 매개변수로 주어집니다.
- [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]
주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.
function solution(dots) {
let inc1 =
(dots[1][1] - dots[0][1]) / (dots[1][0] - dots[0][0]) ==
(dots[2][1] - dots[3][1]) / (dots[2][0] - dots[3][0]);
let inc2 =
(dots[0][1] - dots[2][1]) / (dots[0][0] - dots[2][0]) ==
(dots[1][1] - dots[3][1]) / (dots[1][0] - dots[3][0]);
let inc3 =
(dots[0][1] - dots[3][1]) / (dots[0][0] - dots[3][0]) ==
(dots[1][1] - dots[2][1]) / (dots[1][0] - dots[2][0]);
if (inc1 || inc2 || inc3) {
return 1;
} else {
return 0;
}
}
3. 선분 3개가 평행하게 놓여 있습니다. 세 선분의 시작과 끝 좌표가 [[start, end], [start, end], [start, end]] 형태로 들어있는 2차원 배열 lines가 매개변수로 주어질 때, 두 개 이상의 선분이 겹치는 부분의 길이를 return 하도록 solution 함수를 완성해보세요.
lines가 [[0, 2], [-3, -1], [-2, 1]]일 때 그림으로 나타내면 다음과 같습니다.
선분이 두 개 이상 겹친 곳은 [-2, -1], [0, 1]로 길이 2만큼 겹쳐있습니다.
function solution(lines) {
let line1 = [];
let line2 = [];
let line3 = [];
let count = {};
let answer = 0;
for (let i = lines[0][0]; i < lines[0][1]; i++) {
line1.push(i);
}
for (let i = lines[1][0]; i < lines[1][1]; i++) {
line2.push(i);
}
for (let i = lines[2][0]; i < lines[2][1]; i++) {
line3.push(i);
}
let all = [...line1, ...line2, ...line3];
all.forEach((el) => {
count[el] = (count[el] || 0) + 1;
});
for (let cou in count) {
if (count[cou] > 1) {
answer++;
}
}
return answer;
}
4. 소수점 아래 숫자가 계속되지 않고 유한개인 소수를 유한소수라고 합니다. 분수를 소수로 고칠 때 유한소수로 나타낼 수 있는 분수인지 판별하려고 합니다. 유한소수가 되기 위한 분수의 조건은 다음과 같습니다.
- 기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다.
두 정수 a와 b가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return하도록 solution 함수를 완성해주세요.
function solution(a, b) {
let result = 1;
let arr = [];
for(let i=b; i>1; i--){
if(a % i ==0 && b % i == 0){
a /= i;
b /= i;
}
}
let div = 2;
while(b >= 2){
if(b % div == 0){
b /= div;
arr.push(div)
} else {
div++;
}
}
arr.forEach(e => {
if(e !== 2 && e !== 5){
result = 2;
}
});
return result;
}
728x90
반응형