본문 바로가기

알고리즘

자바스크립트 반복문 문제풀이

728x90

[문제1]

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

 

2438번: 별 찍기 - 1

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

www.acmicpc.net

[나의코드]

let fs = require("fs");
let input = fs.readFileSync("dev/stdin").toString().split("\n");

let n = Number(input[0])

for(i=1;i<=n;i++){
    console.log("*".repeat(i))
}

[해설코드]

let result=""
for(let i=0;i<n;i++){
	for(let j=0; j<=i;j++){
    	result += "*";
    	}
        result += "\n"
    }
    
console.log(result)

해설코드에서는 이중반복문을 사용했는데 시간복잡도가 더 올라가서 별로이지않은가라는 생각이 듦...

 

[문제2]

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

 

15552번: 빠른 A+B

첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.

www.acmicpc.net

[나의 실패코드]

let fs = require("fs");
let input = fs.readFileSync("dev/stdin").toString().split("\n");

let n = Number(input[0])

for(i=1;i<=n;i++){
    console.log(Number(input[i].split(" ")[0]+Number(input[i].split(" ")[1])))
}

시간 초과 뜸;;

 

[해설코드]

let fs = require("fs");
let input = fs.readFileSync("input.txt").toString().split("\n");

let n = Number(input[0]);
let answer="";

for(let i=1;i<=n;i++){
    let data=input[i].split(" ");
    let a = Number(data[0])
    let b = Number(data[1])
    answer+= a+b+ "\n";
}
console.log(answer)

[인사이트]

console.log를 매 계산마다 계속 찍는것은 출력시간을 길어지게 해, 한번에 모아서 찍는 것이 더 시간을 단축시킬 수 있는 방법이다.

미묘하지만 다른 코드들...

for(let i=1;i<=n;i++){
    let data=input[i].split(" ");
    let a = Number(data[0])
    let b = Number(data[1])
    answer=answer+ (a+b)+ "\n";
}

console.log(answer) // 2 4 6 8 10

for(let i=1;i<=n;i++){
    let data=input[i].split(" ");
    let a = Number(data[0])
    let b = Number(data[1])
    answer+= a+b+ "\n";
}
console.log(answer) //2 4 6 8 10

for(let i=1;i<=n;i++){
    let data=input[i].split(" ");
    let a = Number(data[0])
    let b = Number(data[1])
    answer = answer+ a+b+ "\n";
}
console.log(answer) //11,22,33,44,55

 

1번과 2번의 경우 a+b가 먼저 숫자로 계산된 후에 answer에 추가됨, 3번의 경우 answer+a(문자열 계산)이 먼저이루어진 후에 문자열+b(문자열)계산이 이루어짐

728x90