본문 바로가기

알고리즘/알고리즘

[ 스킬 체크 테스트 Level.1] 직사각형 별찍기, 다트게임

직사각형 별찍기

https://programmers.co.kr/learn/courses/30/lessons/12969

 

코딩테스트 연습 - 직사각형 별찍기

이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다. 별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요. 제한 조건 n과 m은 각각 1000 이하인 자연수

programmers.co.kr

문제 설명

이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.


제한 조건
  • n과 m은 각각 1000 이하인 자연수입니다.

예시

입력

5 3

출력

*****
*****
*****

 

자바 풀이

import java.util.Scanner;

class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();

        // System.out.println(a + b);
        for(int i=0; i<b; i++){
            for(int j=0; j<a; j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

 

 


https://programmers.co.kr/learn/courses/30/lessons/17682

 

코딩테스트 연습 - [1차] 다트 게임

 

programmers.co.kr

 

 

다트 게임


예) 1S2D*3T

  • 점수는 0에서 10 사이의 정수이다.
  • 보너스는 S, D, T 중 하나이다.
  • 옵선은 *이나 # 중 하나이며, 없을 수도 있다.

출력 형식

3번의 기회에서 얻은 점수 합계에 해당하는 정수값을 출력한다.
예) 37

입출력 예제

예제dartResultanswer설명
1 1S2D*3T 37 11 * 2 + 22 * 2 + 33
2 1D2S#10S 9 12 + 21 * (-1) + 101
3 1D2S0T 3 12 + 21 + 03
4 1S*2T*3S 23 11 * 2 * 2 + 23 * 2 + 31
5 1D#2S*3S 5 12 * (-1) * 2 + 21 * 2 + 31
6 1T2D3D# -4 13 + 22 + 32 * (-1)
7 1D2S3T* 59 12 + 21 * 2 + 33 * 2

 

자바스크립트 풀이

// let dartResult = "1S2D*3T"; //1^1 * 2 + 2^2 * 2 + 3^3

let dartResult = "1D2S#10S";// 1D   2S#  10S
let answer = solution(dartResult);
console.log("answer>>> ", answer);//37


function solution(dartResult) {
    var answer = 0;
    // let arr = new Array(dartResult);//안됨
    // let arr = Array.from(dartResult);//문자열을 배열로
    let arr = [...dartResult];//문자열을 배열로
    let pre_temp_num = 0;//이전값
    for (let i = 0; i < arr.length; i++) {
        let num = arr[i++] * 1;//숫자문자를 받음
        console.log("type of num> ", typeof num, num);
        if (num === 1) {
            let temp = arr[i] * 1;
            if (temp === 0) {
                num = 10;
                i++;
            }
        }
        console.log("type of num> ", typeof num, num);

        if (arr[i] === "D") {
            num = Math.pow(num, 2);
        } else if (arr[i] === "T") {
            num = Math.pow(num, 3);
        }
        i++;
        console.log("i>> ", i, ", arr[i]>>> ", arr[i], '총합>>>> ', answer);

        //아래 로직은 있으면 하고 없으면 안함
        if (arr[i] === "*") {
            num = num * 2;
            i++;
            console.log("answer: ", answer);
            console.log("pre_temp_num: ", pre_temp_num);
            answer = answer + pre_temp_num;//이전 값을 더한다.
            console.log('총합>>>> ', answer);
        } else if (arr[i] === "#") {
            num = num * (-1);
            i++;
        }
        i--;//for문에서 +1 되기 때문에 미리 -1 한다.
        console.log("num>>>>> ", num); // 첫번째 값, 두번째 값

        answer += (num * 1);
        pre_temp_num = (num * 1);//이전값을 저장함
        console.log("i>> ", i, ", answer>> ", answer, ", pre_temp_num>> ", pre_temp_num);
    }
    return answer;
}

 

인상적인 자바스크립트 풀이

function solution(dart) {        
    const numStack = [];

    const numArray = dart.replace(/[^0-9]/g, " ").split(" ").filter(v => v);
    const strArray = dart.replace(/[0-9]/g, "").split("").filter(v => v.trim());

    while (numArray.length) {
        let num = numArray.shift();
        let str = strArray.shift();

        num = num ** {S: 1, D: 2, T: 3}[str];

        if (["*", "#"].includes(strArray[0])) {
            str = strArray.shift();

            num *= "*" == str ? 2 : -1;

            if ("*" == str) {
                numStack[numStack.length-1] *= 2;

            }
        }

        numStack.push(num);         
    }   

    return numStack.reduce((acc, v) => acc + v, 0);
}

 

 

 

자바 풀이 실패

import java.util.Arrays;
class Solution {
    public int solution(String dartResult) {
        char[] test = dartResult.toCharArray();
        // System.out.println(test[0]);
        int num = test[0] - '0';
        String str = Character.toString(test[1]);
        System.out.println(num+"    "+str);
        switch(str){
            case "S": num = (int)Math.pow(num,1);
                break;
            case "D": num = (int)Math.pow(num,2);
                break;
            case "T": num = (int)Math.pow(num,3);
                break;
            case "*": num = num*2;
                break;
            case "#": num = num*(-1);
                break;
        }
        int answer = 0;
        return answer;
    }
}