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

TED·2023년 8월 21일
0

Javascript CodingTest

목록 보기
10/63
post-thumbnail
  • 오늘푸는 양도 많아서 나눠 벨로깅한닷,,

<오늘의 문제>

🌟 = 내가 생각한 난이도있는 풀이
1. 직사각형 별찍기 1레벨
2. 삼진법 뒤집기 1레벨
3. 삼총사 1레벨

1. 🌟🌟🌟직사각형 별찍기🌟🌟🌟

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => { // 5, 3 이 입력되었다
    const n = data.split(" "); // "5" "3" 으로 분리했다.
    const a = Number(n[0]), b = Number(n[1]); // a는 5, b는 3이 되었다. 
                                              // 예시를 통해서 a는 별의 갯수, b는 몇줄을 의미하는건지 알게되었다
    
    for(let i = 1; i <= b; i++){ // 몇줄인지 먼저 설정하고, 제한조건으로인해 초기값은 1부터다
        let star = "";  // 공백값의 변수를 선언
    for(let j = 1; j <= a; j++){ // 별이 몇개인지 설정하고, 제한조건으로인해 초기값은 1부터다
        star = star + "*" 
        }
        console.log(star); 
    }
        
});
  • 나의 풀이
    : 주석에 설명이 전부 포함되어있다..
    처음보는 형태의 문제였고, 일단 문제를 이해하는게 중요했다. 그래서 a와 b가 각각 별의개수, 줄의개수를 의미함을 알았고,
    각각 for문을 통해 반복이 끝나면 개수를 토해냈다.
process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]); 
    
    const str = "*".repeat(a);
    for(let i = 0; i < b; i++) {
        console.log(str);  // for 0번째 일 때 str(*****)출력 for 1번째일 때 str또 출력
    }
    
});
  • 다른 사람 풀이
    : repeat(a) 로 5를 출력하고, for문으로 3까지 출력했다. for가 0일때 a의 수만큼 " * " 를 생성 반복되는만큼 줄을 생성한다.

2. 삼진법 뒤집기

function solution(n) {
    var answer = 0;
    let opposite = n.toString(3).split('').reverse().join('')
    return parseInt(opposite, 3)
}
  • 나의 풀이
    : 개고생을 하다가.. 아래의 메서드 이용법을 알게되서 쉽게 풀이했다
    일단 자연수이고, 3진법으로 바꿔주기 위해서 toString() 을 사용해서 split()으로 분리한뒤에
    reverse()로 뒤집어줬다 !

    10진수  -> 2진수( 3, 4, 5...N 진수)
    n.toString(N)
    
    2진수 ( 3, 4, 5...N 진수 ) -> 10진수
    parseInt(number,N)

3. 삼총사

function solution(number) {
    var answer = 0;
    for(let i=0; i<number.length; i++){
        for(let j=i+1; j<number.length; j++){
            for(let k=j+1; k<number.length; k++){
                if(number[i] + number[j] + number[k] === 0){
                    answer += 1;
                }
            }
        }
    }
    return answer;
}
  • 나의 풀이
    : 일단 세가지의 중복되지않은 인덱스의 값을 더해줘야되는건가 하고 생각을했고,
    그래서 변수 i, j, k로 for문을 만들어서 각자의 초기값을 i=0, j=i+1, k=j+1 로 맞춰서 서로 중복을 피하고, 각자의 변수의 길이만큼 반복을 진행하여, 총합이 0인경우을 answer값에 +1씩 카운팅했다
function solution(number) {
    let answer = 0;
    
    number.forEach((num1, i) => {
        number.forEach((num2, j) => {
            if (i >= j) return; // 중복된 조합 방지
            
            number.forEach((num3, k) => {
                if (j >= k) return; // 중복된 조합 방지
                
                if (num1 + num2 + num3 === 0) {
                    answer += 1;
                }
            });
        });
    });
    
    return answer;
}
  • 다른 사람 풀이
    : forEach 를 이용했는데.. 역시나 생각도 못했고, 중복값을 피하기위해서 따로 if문으로 조건식을 달아줬다..근데.. forEach는 왜 봐도 모르겠지...
profile
컴맹 개발 입문자

0개의 댓글