Front-End

프로그래머스 기초트레이닝 7일차 본문

알고리즘

프로그래머스 기초트레이닝 7일차

jeongsso 2023. 8. 15. 23:53

오늘은.. 아주 운수나쁜날이었습니다 . ㅠㅠㅠ

점심에 밥하다가 손베이고 ..
그 베이고 만든 점심먹다가 생선가시 목에 걸려서 토하고..
방금도 ... 영양제가 뭐가 안맞는지... 먹고 토하고 ㅜㅜ 엉엉
수난시대였습니다....

 

 

 

 

 

문제 28.  n의 배수


문제 설명

정수 num과 n이 매개 변수로 주어질 때,

num이 n의 배수이면 1을 return

n의 배수가 아니라면 0을 return하도록 solution 함수를 완성해주세요.

 

입출력 예

num n result
98 2 1
34 3 0

 

 

입출력 예 설명

98은 2의 배수이므로 1을 return합니다.

32는 3의 배수가 아니므로 0을 return합니다.

 

 

저의 풀이!

function solution(num, n) {
    return Number(num % n === 0);
}

console.log(solution(34, 3));

 

메모

간단하다. 

num나머지 n이 0이면 배수이고 1아니면 배수가 아닌 식을 쓰면된다.

 

 

 

 

 

 

문제 29.  조건 문자열


문제 설명

문자열에 따라 다음과 같이 두 수의 크기를 비교하려고 합니다.

두 수가 n과 m이라면


">", "=" : n >= m
"<", "=" : n <= m
">", "!" : n > m
"<", "!" : n < m


두 문자열 ineq와 eq가 주어집니다. ineq는 "<"와 ">"중 하나고, eq는 "="와 "!"중 하나입니다. 

그리고 두 정수 n과 m이 주어질 때,

n과 m이 ineq와 eq의 조건에 맞으면 1을 아니면 0을 return하도록 solution 함수를 완성해주세요.

 

 

입출력 예

ineq eq n m result
"<" "=" 20 50 1
">" "!" 41 78 0

 

 

입출력 예 설명

20 <= 50은 참이기 때문에 1을 return합니다.

41 > 78은 거짓이기 때문에 0을 return합니다.

 

 

저의 풀이!

function solution(ineq, eq, n, m) {
    return Number(eq === '!' ? eval(n + ineq + m) : eval(n + ineq + eq + m));
}

console.log(solution('>', '!', 41, 78));

eval 은 절대 사용해서는 안된다.

 

if문 

 

 

 

또는 new Function으로 풀어봤다.

 

 

메모

충격 ! 

eval은 자바스크립트를 배운다면 절대 절대 사용해서는 안되는 함수다.

function을 무시하는 해킹이 가능하기 때문에 절대적으로 금지한다. 

보안에 취약해지기 때문이다.

 

 

 

 

 

문제 30.  코드 처리하기


문제 설명

문자열 code가 주어집니다.
code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.

mode는 0과 1이 있으며, 

idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.

mode가 0일 때
code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
code[idx]가 "1"이면 mode를 0에서 1로 바꿉니다.
mode가 1일 때
code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.
code[idx]가 "1"이면 mode를 1에서 0으로 바꿉니다.
문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요.

단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.

 

 

입출력 예

code result
"abc1abc1abc" "acbac"

 

 

입출력 예 설명

code의 각 인덱스 i에 따라 다음과 같이 mode와 ret가 변합니다.

 

 

저의 풀이!

function solution(code) {
    let answer = '';
    let mode = 0;

    for (let i = 0; i < code.length; i++) {
        if (Number(code[i]) === 1) {
            mode = mode === 1 ? 0 : 1;
        }
        if (Number(code[i]) !== 1 && i % 2 === mode) {
            answer += code[i];
        }
    }
    return answer.length === 0 ? 'EMPTY' : answer;
}

console.log(solution('abc1abc1abc'));

 

 

메모

조건을 잘이해하기 어려웠다.

for 문은 mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.라는 말에 순서대로 확인하겠다 해서 사용했고,

일단 code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. =>이 조건에 대해 먼저 if를 걸었습니다.

 

 

 

Comments