본문 바로가기
코딩테스트

(javascript)문자열 내림차순으로 배치하기, 부족한 금액 계산하기, 문자열 다루기 기본

by 어뇨 2024. 1. 19.

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

 

 

 

 

 

  • 문제설명 

문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

 

  • 제한 사항
    str은 길이 1 이상인 문자열입니다.
function solution(s) {   
    var answer = '';
    let arr = Array.from(s);
    arr.sort((a, b)=> b.localeCompare(a))
    let count = ''
    for(let i = 0 ; i <arr.length ; i++){

    if(arr[i] === arr[i].toUpperCase()){    
    count += arr[i]   

    }else{ answer += arr[i]}  

    } 


    return answer+count;
}

 

우선 문자 s 를 큰것부터 작은것으로 정렬해야한다. 

문자열 자체에서 정렬을하는법은 잘 모르므로, 우선 문자열을 배열로 만드는 것부터 시작했다.

그리고 sort함수를 써서 정렬을 하면 되는데, 숫자끼리의 정렬은 그냥 a - b 혹은 a + b 를 하면 됐지만 문자는 

loacaleCompare를 써줘야한다. 

그리고 이 정렬된 배열을 for문을통해 하나하나 반복할건데 

대문자는 소문자가 정렬된 후 와야하기 때문에 우선 변수로 count를 지정해서 따로 더해줬다.

그리고 마지막에 answer에 count를 더하면 원하는 답이 나왔다.

 

다른사람의 풀이

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

  

이거보곤 '와' 라는 생각밖에 안들었다. 

그냥 뒤집으면 된다 라는 생각은 단 한번도 못했었다. 

지금수준에서 여기서 익힐건 split 사용법과 join 사용법 정도

 

 



문제 2. 부족한 금액 계산하기

 

  • 문제 설명
    새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
    놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
    단, 금액이 부족하지 않으면 0을 return 하세요.
  • 제한사항
    놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수
    처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수
    놀이기구의 이용 횟수 count : 1 ≤ count ≤ 2,500, count는 자연수
function solution(price, money, count) {
    var answer = 0
    for(let i = 1 ; i <= count; i++){
        answer += price *i
    }
    console.log(answer)




    return  answer > money ? answer - money : 0  
}

 

설명이 길어보이지만 보면 간단하다.

우선 price, money, count가 각각 뭐에 해당하는지 봐야하고 n번째 이용하면 원래 이용료의 n배를 내야한다.

설명에 비해 코드는 간단한데, 

for문으로 count횟수만큼 돌리고, price에 i를 곱하면 된다. 

그리고 삼항연산자를써서 answer가 money보다 크면 answer - money를, 그게 아니라면 0을 리턴하면 된다. 



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

 

  • 문제 설명
    문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요.
    예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

 

  • 제한 사항
    s는 길이 1 이상, 길이 8 이하인 문자열입니다.
    s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.
function solution(s) {
    if(s.length !==4 &&s.length !==6){
        return false;
    }
    for(let i = 0 ; i<s.length; i++){
        if(isNaN(s[i]*1)){
            return false;
        }
    }

    return true;
}

 

우선 문자열 s의 길이가 4 또는 6이 아니라면 false를 리턴해야하기때문에 

if문과 &&연산자를 써서 코드를 작성했고, 

그리고 s에 영문 알파벳이 있는지 체크를 한 뒤, 있다면 false를 반환해야 하기때문에 

반복문을 썼고 isNaN (괄호안이 숫자인지 아닌지 체크)을 써서 NaN이면 false를 반환하게 했다.

s[i]에 1을 곱한이유는 숫자형으로 만들기 위해서 했다(- , * , /  를하면 자동으로 숫자형으로 형변환이 이루어짐)