알고리즘 문제 풀기

프로그래머스: [3차] N진수 게임 - javascript(toString, toUpperCase())

Fo_rdang 2024. 4. 8. 20:38
반응형

문제 출처 

https://school.programmers.co.kr/learn/courses/30/lessons/17687

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

정답 풀이 힌트 

- 숫자.toString(진법) 을 이용해 숫자를 원하는 진법으로 바꾼다. 

- toUpperCase() 함수를 통해 대문자로 바꿔준다. 

- substring(0,2)를 활용해서 0번째 idx , 1번째 idx를 구해본다. (예시든거임) 

 

정답 풀이 코드 

function solution(n, t, m, p) {
    let str = ''; //0부터 ~ 정한 수까지 특정 진법으로 고친걸 str에 넣는다. 
    
    for(let i=0; str.length < m * t; i++){ //t: 한 사람이 몇개 숫자 말해야 하나 , m: 사람수 
        str += i.toString(n).toUpperCase(); 
    }
    let answer = ''; //p번째 사람이 말하는것만 넣자. 
    let cnt = 0; 
    
    while(answer.length < t){
        const s = str.substring(cnt, cnt+m) //사람 수 많큼 자른다 ex) 3명이면 idx: 0,1,2
        answer += s[p-1]; //p = 두번째 차례면 idx상으로는 s[p-1]이 된다. 
        cnt += m; //idx = 2까지 잘랐으니까, idx = 3부터 다시 자르려면, cnt에 사람 수 많큼 더하는 것. 
    }
    return answer; 
}

Only 풀이 코드 

function solution(n, t, m, p) {
    let str = ''; 
    
    for(let i=0; str.length < m * t; i++){
        str += i.toString(n).toUpperCase(); 
    }
    let answer = ''; 
    let cnt = 0; 
    
    while(answer.length < t){
        const s = str.substring(cnt, cnt+m)
        answer += s[p-1]; 
        cnt += m;
    }
    return answer; 
}

 

 

나의 틀린 풀이 코드 

function solution(n, t, m, p) {
    //몇진법? 
    //미리 구할 숫자의 개수? 
    //게임에 참가하는 인원 
    //튜브의 순서 p 
    //10 A 
    //11 B
    //12 C
    //13 D
    //14 E
    //15 F
    
    //2진법 4개 구하고, 2명이 하고, 순서는 첫번째 
    //0부터 몇진법에 따라 배열에 PUSH 하고 
    //'' 또 split 한다. 
    //몇번째이냐에 따라 그 해당 숫자만 말하면 되고 
    //그걸 return 하면 됨 
    let answer = []; 
    let num = []; 
     for(let i=0; i<1000; i++){
       let temp =  i.toString(n)
       if(temp.length >=2){
          let spl = temp.split('');
           for(let j=0; j<spl.length; j++){
               num.push(spl[j])
           }
       }else{
           num.push(temp.toUpperCase()); 
       }
     }
    console.log(num)
    //num을 2명씩 첫번째 순서는 ? 
    //[0,1,2,3,4,5,6,7,8,9]
    // 0, 2, 4, 6, 8, 
    //num을 3명씩 두번째 순서는? 
    //[0,1,2,3,4,5,6,7,8,9]
    //1,4,7
    //순서가 1번째면 0부터 + 몇명씩 ? 2명씩이면 +2 index 
    //순서가 2번째면 1부터 3명씩이면? +3 idx  

        for(let i=p-1; i<num.length; i+=m){
            answer.push(num[i])
            if(answer.length === t) break; 
        
    }
    return answer.join(''); 
    
}
반응형