[프로그래머스/코딩테스트 모음/Javascript] 9

TED·2023년 8월 21일
0

Javascript CodingTest

목록 보기
9/63
post-thumbnail
  • 오늘도 문제풀이는 진행된다,,!

<오늘의 문제>

🌟 = 내가 생각한 난이도있는 풀이
1. 문자열 내림차순으로 배치하기 1레벨
2. 부족한 금액 계산하기 1레벨
3. 문자열 다루기 기본 1레벨
4. 행렬의 덧셈 1레벨

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

function solution(s) {
    
    return s.split('').sort().reverse().join('') // 입출력 예시만을 따지면, sort()는 사용하지않아도 된다..
}
// 알파벳은 sort((a, b) => b - a) 가 적용되지않고,
// 보통 sort().reverse() 로 사용하는게 효율이 좋다고한다.
  • 나의 풀이
    : split() 으로 하나씩 분리한뒤에,
    sort() 로 오름차순을 해준다. 대문자는 무조건 소문자 앞에온다(이 점을 이용)
    reverse() 로 요소를 거꾸로 배열해준다.
    그리고 join으로 공백없이 붙여준다.
    알파벳을 내림차순하는 건 일반식으로는 안된다고 알고있다. 그래서 sort()로 오름차순후에 reverse()로 뒤집어주자.
function solution(s) {
    let answer = '';
    let lowercase = (s.replace(/[A-Z]/g, '').split('')).sort().reverse().join('');
    let uppercase = (s.replace(/[a-z]/g, '').split('')).sort().reverse().join('');
    return answer = lowercase + uppercase;
}
  • 다른 사람 풀이
    : 이 풀이는 대문자와 소문자를 각각 내림차순한뒤에 소문자를 앞쪽으로 먼저 더해서 앞으로 리턴되게 하였다.
    일단 replace 괄호안은 정규식표현이 들어갔는데 [] 배열안의 요소을 '' 로 뽑아내고, 내림차순을 진행하였다.

    변수.replace(/찾을 문자열/gi, "변경할 문자열")

2. 부족한 금액 계산하기

function solution(price, money, count) {
    var answer = 0;

    for(let i = 1; i <= count; i++) {
            answer += (price * i) // 3 + 6 + 9 + 12
        
    } 
    
    return (answer - money > 0) ? answer - money : 0;
}

// price 는 카운팅된 count 값이 곱해진다.. 그리고 모든 값은 더해진다..
// 내가 가진 money가 남는다면 0를, 부족하다면 부족한만큼을 출력시킨다..
// 부족하다면 price * count값 - money 를 return..
  • 나의 풀이
    : 일단 돈이 부족하지않을때 0값을 출력해야되는 부분을 조건식을 따로 기입해야되나 생각하다가, 마지막 return 값에
    삼항연산자를 이용해서 간단하게 넣었다.
    price와 money는 고정값이기 때문에 count값에 for문으로 1씩 카운트를 해서 올려주면서 곱한값을 출력하고,
    answer - money > 0 는 돈이 부족 경우엔? 이라는 조건식이니 부족한 돈을 그대로 출력하고, 돈이 남는다면 0으로 출력
    그리고 처음에 실수한부분이 for문에 이미 i값에 count값을 대입했으니 price count가 아니고 price i 을 넣어야되는데
    count를 적어서 분명히 잘못된 부분이 없는데 왜 값이 안나오지 하면서 멍청한 짓을 했다 ㅋ

3. 🌟🌟문자열 다루기 기본🌟🌟

function solution(s) {
    var answer = parseInt(s); // 먼저 s값의 요소를 전부 정수형으로 바꿔준다.
                             // Number는 사용못한다 숫자에 1e3 처럼 지수형식이오면 기능을 못해
    if((s.length === 4 || s.length === 6) && s == answer) { // 여기서 s === answer는 사용불가.
                                                            // s는 현재 문자열이고, Number(s)는 숫자형이니까 type이 다름..
        answer = true;  // 길이가 4 or 6이고, s값이 숫자형입니까? 그럼 true
    } else {
        answer = false; // 아니면? 숫자형이 아닌게 있으니 false
    }
       return answer;
}
  • 나의 풀이
    : 일단 주석에 거의 적어두긴했는데 다시 풀이하자면,,
  1. 일단 s의 숫자요소만 있는지 판단하는 문제이기 때문에 s를 정수형으로 바꿔준다.
    Number()는 사용을 못한다. 1e3 같은 요소가 배열에 있으면 지수형식이라 처리를 못한다.
  2. 일단 길이가 4 or 6이고, s가 정수값이라면? true
  3. 아니면, false.

너무 골이 아팠던 문제였다... 처음엔 for문을 사용해서 s[i] % 1 != 0 이면 false다 라는 식으로 접근했는데
도저히 답이 나오지않아서 더 간단하게 생각해봤던 문젠데 하 너무 어렵다...구글링을 해보니 isNaN()을 사용하던데
그래서 참조해봤다..

function solution(s) {
 // s의 길이가 4 혹은 6이 아닐 경우 false를 리턴한다.
 if (s.length !== 4 && s.length !== 6) return false;

 // 문자열을 하나 씩 가져와 숫자로 변환 되는지 확인하고
 // 숫자로 변환되지 못할 경우 false를 리턴한다.
 for (let i = 0; i < s.length; i++) {
   if (isNaN(s[i])) return false;
 }

 // 다 통과 했을 경우 true를 리턴한다.
 return true;
}

console.log(solution("1234")); // true
console.log(solution("a234")); // false
  • 다른 사람 풀이
    : 주석에 거의 적혀있는데, isNaN()은 괄호안의 값이 문자열일 경우 true값이 나온다고한다.
    알아둬야 할 메서드이다..!

4. 🌟🌟🌟행렬의 덧셈🌟🌟🌟

function solution(arr1, arr2) {
    var answer = []; // 새로운 행렬을 저장할 변수
    // 행렬의 행 개수만큼 반복
    for (let i = 0; i < arr1.length; i++) { // [[1,2],[2,3]]
        var row = []; // 현재 행의 결과를 저장할 변수
        // 행렬의 열 개수만큼 반복
        for (let j = 0; j < arr1[i].length; j++) { //arr1[0] = [1,2]
            // 현재 위치의 요소를 더해서 row 배열에 추가
            row.push(arr1[i][j] + arr2[i][j]); // [1+3, 2+4]
        }   // arr1 행i의 열j인 값 + arr2 행i의 열j인 값
        // 현재 행의 결과인 row 배열을 answer 배열에 추가
        answer.push(row);
    }

    return answer; // 새로운 행렬을 반환
}
  • 나의(구글링) 풀이
    : 행렬의 개념을 잘 모르고 있어서 헤맸던 문제다.. 행과 열 가로와 세로..
    각 '배열'이 행이고 배열안의 '요소 개수'가 열.. 그래서 [[1, 2], [2, 3]]는 2x2 행렬이다.

행렬 문제는 다음에 풀게되어도 틀릴거같다,,ㅎㅎㅎ; 머리속에 잘 들어오질 않네

profile
컴맹 개발 입문자

0개의 댓글