출처 : https://www.acmicpc.net/problem/2438 (백준 온라인 저지)

정답 코드

코드를 살펴봅시다.

let {stdin, stdout} = process;

표준 입출력 스트림을 가져옵니다. 이전 코드에선 표준 입력 스트림만 가져왔지만 이번 코드에서는 표준 출력 스트림도 가져왔습니다. javascript에서 기본적으로 제공하는 console.log 메소드는 표준 출력 스트림에 개행을 자동으로 추가해주므로 개행 자동 추가를 방지하기 위해 표준 출력 스트림에 직접 접근할 계획입니다.

for(let i=0; i<N; i++){
        for(let j=0; j<=i; j++){

for문 2개를 선언합니다. 첫 번째 for문은 입력값만큼 반복하며 두번째 for문은 첫 번째 for문의 i값만큼 반복합니다. 즉 입력값이 만약 5라고 하면 첫 번째 for문은 5번, 두번째 for문은 i값에 따라 1번,2번,3번,4번,5번 반복합니다.

stdout.write("*");

표준 출력 스트림에 *을 작성합니다. 2번째 for문안에 작성되었으므로 i값에 따라 여러번 반복 출력됩니다. 즉 입력값이 만약 3이라고 한다면 2번째 for문은 1번, 2번, 3번 순서대로 실행되므로 총 6개의 *가 출력됩니다.

stdout.write("\n");

표준 출력 스트림에 개행을 작성합니다.  문제에서 출력 형태를 살펴보면 첫 번째 for문에서 코드가 반복될 때마다 개행이 추가되는 것을 볼 수 있습니다.  그래서 이것을 구현하기 위해 2번째 for문이 처리가 전부 끝나면 개행을 작성하여 첫번째 for문이 다음 루프를 수행할 때마다 다음 줄에서 시작할 수 있도록 합니다. 동작 과정을 정리하면 다음과 같습니다.

-> N이 5인 경우

1. for문 i = 0

2. i가 N보다 작으므로 2번째 for문 시작

3. for문 j = 0

4. j가 i보다 작거나 같으므로 stdout.write("*"); 실행

5. j 값이 증가되어 j = 1

6.  j가 i보다 크므로 2번째 for문 종료

7. stdout.write("\n"); 실행

8. i값이 증가되어 i = 1

9. i가 N보다 작으므로 2번째 for문 시작

10. 다시 2번째 for문이 시작되므로 j = 0

11. j가 i보다 작거나 같으므로 stdout.write("*"); 실행

12. j 값이 증가되어 j = 1

13. j가 i보다 작거나 같으므로 stdout.write("*"); 실행

14. j 값이 증가되어 j = 2

15.  j가 i보다 크므로 2번째 for문 종료

16. stdout.write("\n"); 실행

17. 2~14번까지 반복

18. i=5 가 되면 N보다 작지 않으므로 1번째 for문 종료. 즉 2번째 for문이 실행되지 않는다.

'Programing > Baekjoon 문제 알고리즘(node.js)' 카테고리의 다른 글

10172번 개  (0) 2022.02.24
10430번 나머지  (0) 2022.02.24
2739번 구구단  (0) 2022.02.24
9498번 시험 성적  (0) 2022.02.24
1008번 A/B  (0) 2022.02.24
Posted by englishmath
,