본문 바로가기
Developer/Algorithm

Programmers 프로그래머스 코딩테스트 연습 - 직사각형 별찍기(JavaScript)

by roqkfrlfhr 2020. 8. 25.

Programmers 프로그래머스 코딩테스트 연습 - 직사각형 별찍기 (JavaScript)

 

Programmers(프로그래머스)의 코딩테스트 연습문제 Level 1 중,

직사각형 별찍기 문제를 JavaScript로 해결해 보도록 하겠습니다.

 

 

문제 설명

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

 

제한 조건

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

 

예시

입력

5 3

출력

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

 

 

작성한 답

solution.js

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);
    console.log(("*".repeat(a)+"\n").repeat(b));
});

 

설명

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

실제 기본으로 작성되어있는 코드상에서는 두개의 정수 a와 b가 주어지고, 별(*) 문자를 이용해 가로의 길이가 a, 세로의 길이가 b인 직사각형 형태를 출력 시키는 문제입니다.

어떤 알고리즘으로 해결하시든 문제 자체는 정말 너무 쉽고 for문만 아셔도 바로 해결하실 수 있는 문제입니다.

제가 해결한 방법에 대해 설명드리도록 하겠습니다.

위의 작성한 코드에서 기본적으로 이미 작성되어있는 코드를 제외하고 제가 작성한 코드는 아래의 오직 한줄 뿐입니다.

console.log(("*".repeat(a)+"\n").repeat(b));

코드만 봐도 아마 바로 이 코드가 어떻게 작동하는지 감이 오실겁니다.

한줄의 코드를 여러줄로 나눠서 작성해 보겠습니다.

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);   // 가로 길이 : 5 / 세로 길이 : 3 일때
    const row = "*".repeat(a)+"\n";             // "*****"
    const result = row.repeat(b);
    console.log(result);            		// "*****
                                                //  *****
                                                //  *****"
});

먼저 row라는 변수에 별문자 "*" 에 이름만 봐도 감이 오는 문자열을 원하는 횟수만큼 반복하여 만든 문자열을 반환하는 repeat()함수를 사용하여 repeat()함수안에 가로 길이인 a를 넣어 "*".repeat(a)를 하면 별문자를 a 수만큼 반복하면 원하는 가로길이만큼의 별 문자열이 만들어집니다.

그리고 그 문자열 뒤에 줄바꿈을 뜻하는 \n을 붙여줍니다.

그럼 변수 row는 예시와 같이 a(가로 길이)가 5일때 "*****\n", 즉 "*****(줄바꿈)" 이 됩니다.

그리고 완성된 row를 다시 repeat()함수에 세로 길이인 b를 넣어 row.repeat(b)를 하면 row에 있는 "*****\n"이 b의 횟수만큼 반복된 문자열 "*****\n*****\n*****\n", 즉,

*****

*****

*****

이 만들어집니다.

(장황한 설명보다 위의 여러줄로 풀어쓴 코드가 설명이 더 잘 되시리라 생각됩니다...)

 

 

 

도움이 되셨다면 공감, 댓글 부탁드립니다!

궁금하신 점이나 요청 사항은 언제든지 말씀 해주세요!

 

감사합니다.


댓글