출처 : 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
,

문제 : https://www.acmicpc.net/problem/2739 (백준 온라인 저지)

정답 코드

javascript에서는 `(백틱) 기호를 사용하여 Template literals를 만들 수 있습니다.  Template literals은 표현식이 삽입된 문자열이라 보시면 됩니다. 그 외는 크게 설명할 것이 없으니 생략하겠습니다.

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

10430번 나머지  (0) 2022.02.24
2438번 별 찍기  (0) 2022.02.24
9498번 시험 성적  (0) 2022.02.24
1008번 A/B  (0) 2022.02.24
10869번 사칙연산  (0) 2022.02.24
Posted by englishmath
,

문제 : https://www.acmicpc.net/problem/9498 (백준 온라인 저지)

정답 코드

if문으로 처리를 해도 되지만 switch문으로 수행하면 더 간결해보일 것 같아 switch문으로 작성하였습니다. 다른 코드들은 1000번 문제에서 설명드렸으니 설명은 생략하겠습니다.

switch(parseInt(score/10)){

switch 문을 선언합니다. switch문은 지정한 표현식과 일치하는 case 문부터 코드를 수행하며 입력받은 점수에 따라 다른 코드를 수행하기 위해 사용하였습니다. 점수를 처리해주기 위해 표현식을 score/10으로 지정하였는데 표현식을 score만으로 해버리면 60~100 값을 처리할 case문을 다 작성해주어야 하기 처리 때문에 코드가 어마어마하게 길어집니다. 그래서 10으로 나눈 몫을 이용하여 6~10 값만을 처리할 case문만 작성하였습니다. 사용해야할 case문이 확 줄어든 겁니다.

case 10:
case 9:
     console.log("A");
     break;
case 8:
     console.log("B");
     break;
case 7:
     console.log("C");
     break;
case 6:
     console.log("D");
     break;

score 점수를 10으로 나눈 몫이 10인 경우 case 10부터 코드를 수행합니다. 즉 점수가 100점이라면 case 10부터 코드를 수행합니다. 그런데 코드를 보시면 case 10 부분에 코드가 없는데 코드가 없는 이유는 case 9와 수행하는 코드가 동일하기 때문에 굳이 작성할 필요가 없기 때문입니다. 앞에서 말씀드렸듯이 switch 문은 표현식과 일치하는 case문부터 코드를 수행합니다. 즉 case 10부터 코드를 수행한다면 case 10, case 9, case 8.... default 문의 코드까지 수행되게 되므로 case10부터 코드를 수행한다해도 case 9 코드 또한 실행된다는 뜻입니다.

그런데 case 10부터 코드를 수행한다고 하면 case 8, case 7 등의 코드들도 수행이 되버리므로 모든 성적이 출력되버리는 불상사가 발생합니다. 그래서 이를 방지하기 위해 성적출력 코드 밑에 break 문을 추가합니다. 여기서 break문은 switch문 실행을 중지하는 역할을 하므로 case 10 코드를 수행할 때 case 9 코드까지 수행한 후 break 문을 통해 switch문을 종료하게 됩니다. 이 내용을 정리하면 다음과 같습니다.

-> score가 100이면

1. case 10 수행 후 밑의 case 9로 이동합니다.

2. case 9의 console.log("A"); 실행 후 break 문을 통해 switch문을 종료합니다. 즉 case 8은 실행되지 않습니다.

-> score가 93이면

1. case 9의 console.log("A"); 실행 후 break 문을 통해 switch문을 종료합니다. 즉 case 8은 실행되지 않습니다.

-> score가 79이면

1. case 7의 console.log("C"); 실행 후 break 문을 통해 switch문을 종료합니다. 즉 case 6은 실행되지 않습니다.

이제 다음 코드를 살펴봅시다.

default:
     console.log("F");

default는 switch문 가장 마지막에 작성하는 문이며 표현식이 위의 case 중 아무것에도 해당되지 않는다면 default 문을 실행하게 됩니다. 즉 값이 0,1,2,3,4,5 가 나온다면 default의 코드가 수행되며 default 코드를 수행하고 나면 switch문이 종료되므로 break문을 넣어줄 필요가 없어 break를 넣지 않았습니다.

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

2438번 별 찍기  (0) 2022.02.24
2739번 구구단  (0) 2022.02.24
1008번 A/B  (0) 2022.02.24
10869번 사칙연산  (0) 2022.02.24
10998 AxB  (0) 2022.02.24
Posted by englishmath
,