
//입력 (code)
"abc1abc1abc"
//출력
"acbac"
function solution(code) {
let ret = "";
let mode = 0;
for (var i = 0; i<code.length; i++){
if(mode == 0){
if(code[i]==1) mode = 1;
else if(i % 2 == 0) ret += code[i]
} else {
if(code[i]==1) mode = 0;
else if(i % 2 == 1) ret += code[i]
}
}
return ret==""? "EMPTY" : ret;
}
다음 문제의 핵심은 code라는 문자열이 들어왔을 때 default value를 0으로 가지는 mode에 따라 해당 문자열에서 문자를 추출해 새로운 문자열을 반환하는것이다. 기본 로직은 아래와 같다.
mode가 0일때, [index]가 짝수일때만 code[index]를 새로운 문자열의 뒤에 추가한다.
mode가 1일때, [index]가 홀수일때만 code[index]를 새로운 문자열의 뒤에 추가한다.
code[index]가 1이면 mode를 바꾼다.(0→1, 1→0)
- 먼저 새로운 문자열 ret과 mode에 default값인 ""과 0을 각각 설정한다.
- code의 길이만큼 반복하는 반복문을 작성한다.
- mode의 상태를 확인하고, code[index]의 값이 1인지 확인한다.
- code[index]의 값이 1이 아닌 다른 값이면 각각 짝수와 홀수 [index]를 가지는 값을 ret에 추가한다.
//입력(a, d, included)
3, 4, [true, false, false, true, true]
//출력
// 3 + 15 + 19 = 37(true인 항만 더함)
37
function solution(a, d, included) {
let sum = 0;
for (var i = 0; i< included.length; i++){
if (included[i] == true) sum += a + i*d;
}
return sum;
}
- sum 변수를 설정하고 included의 배열 길이만큼 반복한다.
- included[idx] 값이 true일때만 sum변수에 a+i*d를 해준다. 여기서 i는 추가하려는 항이 몇번째 항인지를 의미한다.
//입력(a, b, c)
2, 6, 1
//출력
9
function solution(a, b, c) {
if (a==b||b==c||a==c) {
if (a==b&&b==c) {
return (a+b+c)*(a**2+b**2+c**2)*(a**3+b**3+c**3)
} else {
return (a+b+c)*(a**2+b**2+c**2)
}
} else {
return a+b+c
}
}
- 세 숫자가 모두 다르다면 a + b + c
- 세 숫자 중 어느 두 숫자는 같고 나머지 다른 숫자는 다르다면 (a + b + c) × (a2 + b2 + c2)
- 세 숫자가 모두 같다면 (a + b + c) × (a2 + b2 + c2 ) × (a3 + b3 + c3 )
- if문을 사용하여 a와 b, c의 조건을 검사하여 반환하는 값을 다르게 한다.
- **연산자를 사용하여 변수에 제곱을 해준다.
//입력
[3, 4, 5, 2, 1]
//출력
//모든 원소의 곱은 120, 합의 제곱은 225이므로 1을 return
1
function solution(num_list) {
let n1 = 1;
let n2 = 0;
for (let i of num_list){
n1 *= i;
n2 += i;
}
return n1 > n2**2 ? 0 : 1;
}
- 로직은 간단하다, 모든 원소의 곱을 저장할 n1을 1로 설정하고, 합의 제곱을 저장할 n2를 0으로 설정한다.
- 반복문을 사용해 num_list의 값이 i로 갈때 모든 원소들을 곱하기 할당과 더하기 할당을 사용하여 각각 n1과 n2에 저장한다.
- 3항 연산자로 n2에 제곱을 한 값을 n1과 비교하여 0과 1 둘중 어느것을 반환할지 선택한다.
//입력
[3, 4, 5, 2, 1]
//출력(351 + 42)
392
function solution(num_list) {
let n1 = "";
let n2 = "";
for(let i of num_list){
if (i%2==0) n1 += i
else n2 += i
}
return Number(n1) + Number(n2)
}
- n1과 n2를 빈 문자열로 선언하고, num_list의 길이만큼 반복한다.
- num_list의 index에 해당하는 값을 받은 i를 홀짝을 판별한다.
- 로직에 따라 n1과 n2에 각각 저장한다.
- n1과 n2는 문자열이므로 Number()를 사용해 숫자로 바꿔 연산후 반환한다.