본문 바로가기

백준/JavaScript

[JS] 백준 24265번 - 알고리즘의 수행 시간 4

728x90

 

 

문제 24265번

https://www.acmicpc.net/problem/24265

 

24265번: 알고리즘 수업 - 알고리즘의 수행 시간 4

오늘도 서준이는 알고리즘의 수행시간 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. 입력의 크기 n이 주어지면 MenOfPassion 알고리즘 수행 시

www.acmicpc.net

 

이번 MenOfPassion은 이중 반복문을 사용하는데 for문이 각각 1 ~ n-1, i+1 ~ n 범위에서 수행한다. 음... 어떻게 수행 횟수를 구하지 하다가 다른 분의 설명을 보니까 확실하게 이해갔다.

 

만약 n을 7이라고 가정하자.

그러면 i는 1에서부터 6까지 반복하고, i를 수행할 때마다 j는 i+1부터 7까지 반복하게 되는 것이다.

(i=1) j -> 2~7 //6번

(i=2) j -> 3~7 //5번

(i=3) j -> 4~7 //4번

(i=4) j -> 5~7 //3번

(i=5) j -> 6~7 //2번

(i=6) j -> 7 //1번

총 1+2+3+4+5+6 = 21번의 수행 횟수

 

1~n까지 구하는 합 공식은 n(n+1)/2이다.

이 문제에서는 1~n-1까지의 합을 구해야하므로 (n-1)((n-1)+1)/2 = n(n-1)/2가 된다.

 

따라서 수행 횟수는 input(input-1)/2이고, for문의 개수는 2이므로 최고차항의 차수는 2이다.

...

라고 했는데, input(input-1)/2를 그대로 출력하니 타입에러가 났다...

그래서 이거를 반복문을 이용하여 1부터 input-1까지의 숫자를 다 더해주어 출력해주었다.

const readFileSyncAdress = process.platform === 'linux' ? '/dev/stdin':'./input.txt'
const input = require("fs").readFileSync(readFileSyncAdress).toString().trim();

let result = 0;
for(let i=1;i<=input-1;i++){
    result+=i;
}

console.log(result)
console.log(2)

 

 

 

 

[참고] https://velog.io/@gayeong39/%EB%B0%B1%EC%A4%80-24265-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%88%98%EC%97%85-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98

 

 


+추가)

아... 내가 왜 자꾸 타입에러가 났는지 알아냈다...

 

// 타입에러난 코드

const readFileSyncAdress = process.platform === 'linux' ? '/dev/stdin':'./input.txt'
const input = require("fs").readFileSync(readFileSyncAdress).toString().trim();

let result = (input(input-1)/2);
console.log(result)
console.log(2)

 

// 수정한 코드

const readFileSyncAdress = process.platform === 'linux' ? '/dev/stdin':'./input.txt'
const input = require("fs").readFileSync(readFileSyncAdress).toString().trim();

let result = (input*(input-1)/2);
console.log(result)
console.log(2)

 

 

 

그렇다... 난 바보다...

나는 input(input-1)에서 곱하기를 생략해버린 것이다..

ㅇㅣ런 실수를...

728x90