조건에 맞게 수열 변환하기 1
문제
정수 배열 arr
가 주어집니다. arr
의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱합니다. 그 결과인 정수 배열을 return 하는 solution 함수를 완성해 주세요.
- 제한사항
- 1 ≤
arr
의 길이 ≤ 1,000,000- 1 ≤
arr
의 원소의 값 ≤ 100
- 1 ≤
- 1 ≤
소스 코드
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let arr = '';
rl.on('line', (line) => {
arr = line.split(' ').map(Number);
rl.close();
}).on('close', () => {
const answer = solution(arr);
console.log(answer);
});
const solution = arr => {
let answer = [];
for (const item of arr) {
if (item >= 50 && item % 2 === 0) {
answer.push(item / 2);
} else if (item < 50 && item % 2 === 1) {
answer.push(item * 2);
} else {
answer.push(item);
}
}
return answer;
};
조건에 맞게 수열 변환하기 2
문제
정수 배열 arr
가 주어집니다. arr
의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱하고 다시 1을 더합니다.
이러한 작업을 x
번 반복한 결과인 배열을 arr(x)
라고 표현했을 때, arr(x) = arr(x + 1)
인 x
가 항상 존재합니다. 이러한 x
중 가장 작은 값을 return 하는 solution 함수를 완성해 주세요.
단, 두 배열에 대한 "="는 두 배열의 크기가 서로 같으며, 같은 인덱스의 원소가 각각 서로 같음을 의미합니다.
- 제한사항
- 1 ≤ arr의 길이 ≤ 1,000,000
- 1 ≤ arr의 원소의 값 ≤ 100
- 1 ≤ arr의 길이 ≤ 1,000,000
소스 코드
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let arr = '';
rl.on('line', (line) => {
arr = line.split(' ').map(Number);
rl.close();
}).on('close', () => {
const answer = solution(arr);
console.log(answer);
});
const solution = arr => {
let tempArray = [...arr];
let array = arr;
let count = 0;
while (true) {
for (let index in array) {
if (array[index] >= 50 && array[index] % 2 === 0) {
array[index] = array[index] / 2;
} else if (array[index] < 50 && array[index] % 2 === 1) {
array[index] = array[index] * 2 + 1;
} else {
array[index] = array[index];
}
}
console.log(JSON.stringify(tempArray), JSON.stringify(array))
if (JSON.stringify(tempArray) === JSON.stringify(array)) {
return count;
}
tempArray = [...array];
count++;
}
};
1로 만들기
문제
정수가 있을 때, 짝수라면 반으로 나누고, 홀수라면 1을 뺀 뒤 반으로 나누면, 마지막엔 1이 됩니다. 예를 들어 10이 있다면 다음과 같은 과정으로 1이 됩니다.
10 / 2 = 5 (5 - 1) / 2 = 2 2 / 2 = 1 위와 같이 3번의 나누기 연산으로 1이 되었습니다.
정수들이 담긴 리스트 num_list
가 주어질 때, num_list
의 모든 원소를 1로 만들기 위해서 필요한 나누기 연산의 횟수를 return하도록 solution 함수를 완성해주세요.
- 제한사항
- 3 ≤
num_list
의 길이 ≤ 15 - 1 ≤
num_list
의 원소 ≤ 30
- 3 ≤
소스 코드
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let arr = '';
rl.on('line', (line) => {
arr = line.split(' ').map(Number);
rl.close();
}).on('close', () => {
const answer = solution(arr);
console.log(answer);
});
const solution = num_list => {
let count = 0;
for (let num of num_list) {
while (num !== 1) {
if (num % 2 === 0) {
num = num / 2;
} else {
num = (num - 1) / 2;
}
count++;
}
}
return count;
};
길이에 따른 연산
문제
정수가 있을 때, 짝수라면 반으로 나누고, 홀수라면 1을 뺀 뒤 반으로 나누면, 마지막엔 1이 됩니다. 예를 들어 10이 있다면 다음과 같은 과정으로 1이 됩니다.
10 / 2 = 5 (5 - 1) / 2 = 2 2 / 2 = 1 위와 같이 3번의 나누기 연산으로 1이 되었습니다.
정수들이 담긴 리스트 num_list
가 주어질 때, num_list
의 모든 원소를 1로 만들기 위해서 필요한 나누기 연산의 횟수를 return하도록 solution 함수를 완성해주세요.
- 제한사항
- 3 ≤
num_list
의 길이 ≤ 15 - 1 ≤
num_list
의 원소 ≤ 30
- 3 ≤
소스 코드
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let arr = '';
rl.on('line', (line) => {
arr = line.split(' ').map(Number);
rl.close();
}).on('close', () => {
const answer = solution(arr);
console.log(answer);
});
const solution = num_list => {
let answer = 0;
if (num_list.length > 10) {
for (const num of num_list) {
answer += num;
}
} else {
answer = 1;
for (const num of num_list) {
answer *= num;
}
}
return answer;
};
원하는 문자열 찾기
문제
알파벳으로 이루어진 문자열 myString
과 pat
이 주어집니다. myString
의 연속된 부분 문자열 중 pat
이 존재하면 1을 그렇지 않으면 0을 return 하는 solution 함수를 완성해 주세요.
단, 알파벳 대문자와 소문자는 구분하지 않습니다.
- 제한사항
- 1 ≤
myString
의 길이 ≤ 100,000 - 1 ≤
pat
의 길이 ≤ 300 myString
과pat
은 모두 알파벳으로 이루어진 문자열입니다.
- 1 ≤
소스 코드
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let myString = '';
let pat = '';
let count = 0;
rl.on('line', (line) => {
if (count === 0) {
myString = line;
} else {
pat = line;
}
count++;
if (count > 1) {
rl.close();
}
}).on('close', () => {
const answer = solution(myString, pat);
console.log(answer);
});
const solution = (myString, pat) => {
if (myString.toLowerCase().includes(pat.toLowerCase())) {
return 1;
} else {
return 0;
}
};
Ghost