저장을 습관화
프로그래머스 LV.0 조건 문자열 본문
프로그래머스 LV.0 조건 문자열
https://school.programmers.co.kr/learn/courses/30/lessons/181934
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 명
조건 문자열
2. 문제 설명
문자열에 따라 다음과 같이 두 수의 크기를 비교하려고 합니다.
두 수가 n과 m이라면
- ">", "=" : n >= m
- "<", "=" : n <= m
- ">", "!" : n > m
- "<", "!" : n < m
두 문자열 ineq와 eq가 주어집니다. ineq는 "<"와 ">"중 하나고, eq는 "="와 "!"중 하나입니다. 그리고 두 정수 n과 m이 주어질 때, n과 m이 ineq와 eq의 조건에 맞으면 1을 아니면 0을 return하도록 solution 함수를 완성해주세요.
3. 제한 사항
- 1 ≤ n, m ≤ 100
4. 예시
ineq | eq | n | m | result |
"<" | "=" | 20 | 50 | 1 |
">" | "!" | 41 | 78 | 0 |
5. 기본 제공 코드
function solution(ineq, eq, n, m) {
var answer = 0;
return answer;
}
6. 제출한 내 답
const solution = (ineq, eq, n, m) => {
if (ineq === ">" && eq === "=") return n >= m ? 1 : 0;
if (ineq === ">" && eq === "!") return n > m ? 1 : 0;
if (ineq === "<" && eq === "=") return n <= m ? 1 : 0;
if (ineq === "<" && eq === "!") return n < m ? 1 : 0;
};
6-2. VSC에 작성한 내용
const solution = (ineq, eq, n, m) => {
if (ineq === ">" && eq === "=") return n >= m ? 1 : 0;
if (ineq === ">" && eq === "!") return n > m ? 1 : 0;
if (ineq === "<" && eq === "=") return n <= m ? 1 : 0;
if (ineq === "<" && eq === "!") return n < m ? 1 : 0;
};
// 테스트
console.log(solution("<", "=", 20, 50));
console.log(solution(">", "!", 41, 78));
// console.log(solution());
7. 특이사항
처음엔 이런식으로 작성해봤다.
const solution = (ineq, eq, n, m) => {
let cal = `${n}${ineq}${eq}${m}`;
console.log(cal);
return cal ? 1 : 0;
};
// 테스트
console.log(solution("<", "=", 20, 50));
console.log(solution(">", "!", 41, 78));
그런데 결과가 0이어야 하는 상황에도 1이 나오더라
왜 그런가 뜯어보니까 두번째 테스트 같은 경우
41 >! 78이 되는 경우에는 !가 78에 붙어
41 > !78
41 > false 가 되어버렸다.
나는 !== 같은 효과를 기대했는데 잘못 사용했다.
자바스크립트에 >!, <! 같은 비교 연산자는 없는데
애초에 let cal = `${n}${ineq}${eq}${m}`; 이 방법부터 잘못됐었다
왜 자꾸 1이 나올까 테스트 해보니까
let a = "41>!78";
console.log(a); // 41>!78
console.log(a ? 1 : 0); // true
삼항연산자에 들어가는 a가 계산식이 아니라
문자열이 존재하는 것으로 인식이 되어서 참이 되는 것이었다.
8. 다른 사람이 작성한 답
8-1. 객체지향
const operations = {
'>=': (n, m) => n >= m,
'<=': (n, m) => n <= m,
'>!': (n, m) => n > m,
'<!': (n, m) => n < m,
};
function solution(ineq, eq, n, m) {
const op = operations[ineq + eq];
return Number(op(n, m));
}
8-2.
function solution(ineq, eq, n, m) {
if (eq === '=' && n === m) return 1
if (ineq === '<' && n < m) return 1
if (ineq === '>' && n > m) return 1
return 0
}
'코딩 테스트 > 프로그래머스 - 자바스크립트' 카테고리의 다른 글
프로그래머스 LV.0 원소들의 곱과 합 (0) | 2023.09.13 |
---|---|
프로그래머스 LV.0 홀짝에 따라 다른 값 반환하기 (0) | 2023.09.13 |
프로그래머스 LV.0 flag에 따라 다른 값 반환하기 (0) | 2023.09.10 |
프로그래머스 LV.0 공배수 (0) | 2023.09.10 |
프로그래머스 LV.0 n의 배수 (0) | 2023.09.10 |