알고리즘 풀다 죽은 개발자가 때깔도 곱다

 

1. 문자열 내림차순으로 배치하기

 

간단하고 쉬워보이는 문제이다

이전에 풀었던 정수 내림차순으로 나열하기 와 같은 맥락이다

 

sort  정렬 시 대문자가 소문자 앞에 오던가 뒤에 오던가 헷갈리는 부분이 있긴한데...

해보면 알 것이다

function solution(s) {
    s= s.split('').sort();
    return s
}

 

대문자가 소문자보다 앞에 오기 때문에 다행이다.

이러면 여기서 역순 reverse 적용하고 join하면 끝이다

 

function solution(s) {
    s= s.split('').sort().reverse().join('');
    return s
}

 

 

 

2. 부족한 금액 계산하기

 

1회 이용시마다 기본 금액에 무려 100% 할증이 붙는 놀이공원이 되었다

 

내가 생각 한 방법은

반복문으로 count 까지의 총 요금을 구하고, 

소지금 money 에서 총 요금을 뺀 결과가 0 이상이면 0으로 출력,

음수면 (-) 부호만 떼줘서 출력 이다.

 

여기서, 음수 부호만 떼는법만 배워오면 될듯하다

 

Math.abs();   

=  () 내의 수가 음수일 경우 양수로 바꿔준다

 

function solution(price, money, count) {
    var answer = 0;
    for(var i = 1; i <= count ; i++) {
        answer += price * i
    }
    answer = money - answer >= 0 ? 0 : Math.abs(money- answer);
    return answer;
}

위에서 설명한 그대로의 코드가 되었다

 

상당히 부끄럽게도, Math.abs는 필요가 없었다

부족한 금액에 초점을 맞춘 나머지 -를 지워야 한다는 생각을 했는데,

 

애초에  money - answer 가 음수인 경우라면,  answer -money 를 하면 양수로 나오는 것이었다

    return money - answer >= 0 ? 0 : answer - money;

이렇게 !

 

 

 

3.  문자열 다루기 기본

 

 

갑자기 '기본' 이라는 문제가 튀어나온걸 보니

아직 못배운 영역이 나왔을것이 분명하다.

 

아니나 다를까, 간단해보이는 문제이지만 어떻게 해결해야 할 지 모르겠다.

길이 4 || 6 체크는 쉽겠지만, 문자열을 포함할때 true false를 나누는 법을 모르겠다

 

답을 알아내기 위해 검색을 하다가

 

parseInt();  를 활용하는 것을 보았다.

parseInt() 는 , 문자열을 숫자로 반환하는, 기존에 알고있던 함수이다.

 

여기서 중요한건, parseInt() 는 정확하게 

(숫자로 바꿀수 있는것) ~ (숫자로 바꿀 수 있는것) 까지만 반환한다.

즉 "a123" 처럼 알파벳으로 시작하는 경우 반환될 값이 없어  NaN 가 출력된다.

"123a456" 의 경우, 알파벳 a의 이전까지인 123 까지만 반환이 된다.

 

이 문제를 풀기 위한 핵심은

숫자 이외 불순물이 하나라도 있다면 기존의 값과 달라진다는 것이다.

"a123" == parseInt("a123")    ==> false 라는 말이다

이것으로 문자열을 포함하는지를 체크할 수 있다.

최선인지는 모르겠지만 말이다

 

function solution(s) {
    var answer = 0;
    if ( s.length == 6 || s.length ==4 ) {
        if ( s == parseInt(s)) { return true}
        else return false;
    }
        else return false;
    return answer;
}

 

쓰이지도 않은 answer 를 버리고 

조건문을 조금 깔끔하게 고치면

 

function solution(s) {
    if((s.length == 4 || s.length ==6) && (s == parseInt(s))) { return true}
     else return false;
}

 

 

를  삼항연산자로

function solution(s) {
    return (s.length ==4 || s.length == 6) && (s== parseInt(s)) ? true : false
}

 

이렇게 쓸 수 있다..

 

 

'사전캠프' 카테고리의 다른 글

28일차 - SQL 문제 풀이  (0) 2024.07.30
27일차 - 알고리즘 풀이  (0) 2024.07.29
25일차 - 알고리즘 풀이  (3) 2024.07.24
24일차 - 알고리즘 풀이  (1) 2024.07.23
23일차 - 알고리즘 풀이  (3) 2024.07.22

+ Recent posts