'Programing'에 해당되는 글 79건

  1. 2022.02.24 2742번 기찍 N
  2. 2022.02.24 8393번 합
  3. 2022.02.24 2439번 별 찍기 - 2
  4. 2022.02.24 1330번 두 수 비교하기
  5. 2022.02.24 10171번 고양이
  6. 2022.02.24 2741번 N 찍기
  7. 2022.02.24 10172번 개
  8. 2022.02.24 10430번 나머지
  9. 2022.02.24 2438번 별 찍기
  10. 2022.02.24 2739번 구구단

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

성공 코드

2741번 문제와 유사하지만 값을 N부터 1까지 찍는 문제입니다. 2471번 문제 풀이 코드에서 for문의 i값과 조건문만 조금 수정해주면 풀 수 있습니다. 

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

10950번 A+B - 3  (0) 2022.02.25
2753번 윤년  (0) 2022.02.24
8393번 합  (0) 2022.02.24
2439번 별 찍기 - 2  (0) 2022.02.24
1330번 두 수 비교하기  (0) 2022.02.24
Posted by englishmath
,

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

성공 코드

1부터 n까지의 합을 구하는 수학 공식은 ((n*(n+1))/2 입니다. 이러한 수학 공식을 알고 있으면 별도의 for문 없이 코드를 구현할 수 있습니다.

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

2753번 윤년  (0) 2022.02.24
2742번 기찍 N  (0) 2022.02.24
2439번 별 찍기 - 2  (0) 2022.02.24
1330번 두 수 비교하기  (0) 2022.02.24
10171번 고양이  (0) 2022.02.24
Posted by englishmath
,

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

성공한 코드

어떤 방식으로 풀지 고민하다가 javascript의 padStart 메소드를 사용하여 풀면 재미있을 것 같아서 위와 같이 코드를 작성하였습니다. 보통 for문에 console.log 를 넣는 것은 속도면에서 그리 좋지 못하지만 N 크기가 100으로 제한되어 있으므로 큰 무리가 없을 것이라 판단하여 console.log를 넣었습니다. 코드를 살펴보겠습니다.

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

N번만큼 반복합니다. 즉 줄 단위로 처리하기 위해 선언하였습니다.

str = "";

한 줄 출력에 사용할 str을 초기화합니다. 매 줄 마다 다른 값을 출력해야 하므로 초기화는 당연히 필요합니다.

for(let j=0; j<=i; j++){
     str = str+"*";
}

현재 줄 수만큼 반복합니다.  즉 4번째 줄을 처리하고 있다면 이 for문은 4번 반복 수행합니다. 예제에서 각 줄의 별 개수는 현재 줄 번호와 동일하므로 위와 같이 선언하였습니다. 이를 쉽게 정리하면 다음과 같습니다.

-> 1번째 줄

str = *

-> 2번째 줄

str = **

-> 3번째 줄

str = ***

... (생략)

str = str.padStart(N," ")

padStart 메소드를 사용해 현재 문자열의 크기가 입력한 값 크기를 가질 때까지 앞쪽에 " " 문자열을 삽입합니다. 즉 다음과 같은 결과가 만들어집니다.

-> 입력값이 5라면

-> 1번째 줄

별표가 1개 있으므로 문자열 가장 앞부분에 공백 4개를 삽입하여 크기를 입력값(5)으로 만듬.

str =     *

-> 2번째 줄

별표가 2개 있으므로 문자열 가장 앞부분에 공백 3개를 삽입하여 크기를 입력값(5)으로 만듬.

str =    **

-> 3번째 줄

별표가 3개 있으므로 문자열 가장 앞부분에 공백 2개를 삽입하여 크기를 입력값(5)으로 만듬.

str =   ***

...(생략)

console.log(str);

한 줄 문자열이 만들어졌으니 출력합니다.

 

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

2742번 기찍 N  (0) 2022.02.24
8393번 합  (0) 2022.02.24
1330번 두 수 비교하기  (0) 2022.02.24
10171번 고양이  (0) 2022.02.24
2741번 N 찍기  (0) 2022.02.24
Posted by englishmath
,

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

성공 코드

간단한 if문 활용 문제이므로 설명은 생략하겠습니다.

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

8393번 합  (0) 2022.02.24
2439번 별 찍기 - 2  (0) 2022.02.24
10171번 고양이  (0) 2022.02.24
2741번 N 찍기  (0) 2022.02.24
10172번 개  (0) 2022.02.24
Posted by englishmath
,

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

성공한 코드

10172번 문제 풀이와 비슷하므로 설명은 생략하겠습니다.

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

2439번 별 찍기 - 2  (0) 2022.02.24
1330번 두 수 비교하기  (0) 2022.02.24
2741번 N 찍기  (0) 2022.02.24
10172번 개  (0) 2022.02.24
10430번 나머지  (0) 2022.02.24
Posted by englishmath
,

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

실패한 코드(Timeout)

간단한 문제이지만 javascript로 위의 코드를 수행했더니 Timeout이 발생하였습니다. 아무래도 처리시간이 생각보다 긴 모양입니다. 처리시간을 단축시키기 위해 다음과 같은 풀이법을 세웠습니다.

1. for문을 쓰지 않기

입력값을 랜덤으로 받는 이상 for문을 안쓰고 처리하기에는 힘들어보였습니다. 물론 javascript 문법과 알고리즘에 미숙한 이유도 있습니다.

2. console.log를 1번만 쓰기 

console.log 메소드 처리속도가 생각보다 느릴수도 있겠다는 생각이 들었습니다. 위 코드에서는 입력값만큼 console.log 메소드를 호출하므로 console.log 메소드 처리속도가 느리다면 전체 코드 처리 속도가 상당히 늦어질 것입니다. 그래서 console.log를 1번만 호출하여 처리 속도가 달라지는지 확인할 필요가 있었습니다.

console.log 메소드 처리속도가 느리다는 가설이 맞는지 확인하기 위해 코드를 아래와 같이 작성하였습니다. console.log 메소드를 1번만 호출하기 위해서는 버퍼에 출력할 내용을 전부 담아야 합니다. 그래서 for문을 이용해 출력해야할 데이터를 버퍼에 전부 담은 다음 console.log 메소드를 1번만 호출하였습니다.

성공한 코드

stdoutArr.push(`${i}\n`);

배열에 정수와 개행을 담습니다. 해당 for문 수행이 끝나면 배열의 각 요소에는 정수와 개행이 포함됩니다.

console.log(stdoutArr.join(""));

배열의 각 요소를 하나로 합친 문자열을 출력합니다. 이 때 구분자는 빈 문자열로 지정합니다.

다행히도 위 코드는 성공하였습니다. 앞으로 처리 속도가 중요한 코드를 풀 때는 console.log 도 한 번 살펴봐야겠습니다.

 

 

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

1330번 두 수 비교하기  (0) 2022.02.24
10171번 고양이  (0) 2022.02.24
10172번 개  (0) 2022.02.24
10430번 나머지  (0) 2022.02.24
2438번 별 찍기  (0) 2022.02.24
Posted by englishmath
,

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

정답 코드

말 그대로 개를 출력하면 되는 문제이며 한 줄 단위로 끊어서 작성하시면 쉽게 풀 수 있습니다. 단 javascript에서 이스케이프(\)를 출력할려면 \\로 작성하셔야 하며 싱글쿼터, 더블쿼터를 출력하실려면 문자열을 출력할 쿼터와 다른 쿼터로 감싸셔야 합니다. 정리하면 다음과 같습니다.

\ -> "\\"

" -> '"'

' -> "'"

 

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

10171번 고양이  (0) 2022.02.24
2741번 N 찍기  (0) 2022.02.24
10430번 나머지  (0) 2022.02.24
2438번 별 찍기  (0) 2022.02.24
2739번 구구단  (0) 2022.02.24
Posted by englishmath
,

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

성공한 코드

문제를 그대로 코드로 옮기면 됩니다. 수학 공식에 빠삭하다면 좀 더 간략하게 작성할 수도 있을 것입니다. 일단 이전 코드에 비해 달라진 부분만 설명드리겠습니다.

let [A,B,C] = stdinNumbers.map(input => {
        return parseInt(input);
})

입력값 3개를 정수로 변환하여 받는 코드입니다. 기존에 작성했던 코드로는 입력값이 많아질수록 코드줄이 늘어나는 구조이므로 이번에 새롭게 수정하였습니다. 문자열 인자가 들어있는 배열에서 map 메소드를 호출한 후 각 요소를 정수로 바꾸어 배열로 반환하도록 하였으며 이 때 반환된 배열의 각 요소들이 A,B,C 변수에 저장됩니다.

 

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

2741번 N 찍기  (0) 2022.02.24
10172번 개  (0) 2022.02.24
2438번 별 찍기  (0) 2022.02.24
2739번 구구단  (0) 2022.02.24
9498번 시험 성적  (0) 2022.02.24
Posted by englishmath
,

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