프로그래머스 코딩테스트연습 레벨 0
조건 문자열
https://school.programmers.co.kr/learn/courses/30/lessons/181934
나의 풀이
function solution(ineq, eq, n, m) {
let sum = ineq + eq
if(sum.includes('!')){
sum = sum.slice(0, 1)
}
if(sum === '>='){
return n >= m ? 1 : 0
} else if(sum === '<='){
return n <= m ? 1 : 0
} else if(sum === '>'){
return n > m ? 1 : 0
} else if(sum === '<'){
return n < m ? 1 : 0
}
}
다른 사람의 풀이
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));
}
- 다양한 비교연산자 함수가 포함된 객체를 이용한 풀이이다.
- n과 m이라는 매개변수를 받는 함수 객체들을 속성 명칭에 따라 불러올 수 있다.
코드 처리하기
https://school.programmers.co.kr/learn/courses/30/lessons/181932
나의 풀이
function solution(code) {
let str = code[0]
let mode = 0
for(let i = 1; i < code.length; i++){
console.log(code[i], mode, str)
// mode = 0이면 인덱스가 짝수인 글자가 추가
if(mode === 0 && i % 2 === 0){
str += code[i]
}
if(code[i] === '1'){
mode++;
// mode = 1이면 인덱스가 홀수인 글자가 추가
if(mode === 1 && i % 2 !== 0){
str += code[i]
// mode = mode - 1
}
}
}
return str;
}
- 첫 번째로 시도해본 코드인데, mode = mode - 1을 할때 1이 빠지지 않는다.
코드 리팩토링
function solution(code) {
let str = code[0]
let mode = 0
for(let i = 1; i < code.length; i++){
// mode와 인덱스가 짝수인 글자가 추가
if(mode % 2 === 0 && i % 2 === 0){
str += code[i]
}
**if(code[i] === '1')**{
mode++;
continue
// mode와 인덱스가 홀수인 글자가 추가
if(mode % 2 !== 0 && i % 2 !== 0){
str += code[i]
}
}
console.log(i, code[i], mode, str)
}
return str;
}
- 두 번째로 조건문을 변경해 본 코드인데, 이번에는 i = 5이고, mode = 1이고, code[i] = b 일때 b는 포함시키지 못하는 문제가 있다.
- 빨간색으로 표시한 부분에 의해서 ‘b’의 인덱스는 홀수이지만 이전 조건문인 ‘1’이 아니기 때문에 그 내부의 조건문에 해당하지 못하여 b가 str에 더해지지 못한 것이다.
다른 사람의 풀이
function solution(code) {
let str = ''
let mode = 0
for(let i =0; i < code.length; i++){
if(mode){ // 자바스크립트에서는 mode = 1을 true,
if(code[i]!=='1'&&i%2===1) str += code[i]
if(code[i]==='1') mode = 0
}else { // mode = 0은 false로 자동으로 인식하기 때문에 mode = 0, mode = 1이라고
// 따로 조건을 작성하지 않아도 되는 것이다!!
if(code[i]!=='1'&&i%2===0) str += code[i]
if(code[i]==='1') mode = 1
}
}
return str?str:"EMPTY";
}
- 이 풀어주신 문제로 mode가 1 일때와 0 일때의 두 가지 조건으로 먼저 나누어준다.
- 만약 mode가 1일 때, 두 가지로 나뉜다. 첫 번째 조건은 code 요소가 1이 아니고 인덱스가 홀수이면 str에 code 요소를 더한다. 두 번째 조건은 code 요소가 1이면 mode에 0을 할당한다.
- 만약 mode가 0일 때, 두 가지로 나뉜다. 첫 번째 조건은 code 요소가 1이 아니고 인덱스가 짝수이면 str에 code 요소를 더한다. 두 번째 조건은 code 요소가 1이면 mode에 1을 할당한다.
- 마지막 return에는 str이 만약 빈문자열일 때를 대비하여 삼항조건문을 넣는다.
'JS > 알고리즘(코테)' 카테고리의 다른 글
프로그래머스 코딩테스트 LV.0 - 1로 만들기, 날짜 비교하기, 이진수 더하기 (0) | 2023.05.31 |
---|---|
프로그래머스 코딩테스트 LV.0 - 배열 만들기4 (0) | 2023.05.31 |
프로그래머스 LV.1 - 문자열 내 마음대로 정렬하기 (0) | 2023.05.26 |
프로그래머스 LV.0 - 진료순서 정하기, 가까운 수 (0) | 2023.05.26 |
프로그래머스 LV.0 - 수 조작하기 2 (0) | 2023.05.23 |