문제
본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.
C++을 사용하고 있고 cin/cout을 사용하고자 한다면, cin.tie(NULL)과 sync_with_stdio(false)를 둘 다 적용해 주고, endl 대신 개행문자(\n)를 쓰자. 단, 이렇게 하면 더 이상 scanf/printf/puts/getchar/putchar 등 C의 입출력 방식을 사용하면 안 된다.
Java를 사용하고 있다면, Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다. BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다.
Python을 사용하고 있다면, input 대신 sys.stdin.readline을 사용할 수 있다. 단, 이때는 맨 끝의 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우 .rstrip()을 추가로 해 주는 것이 좋다.
또한 입력과 출력 스트림은 별개이므로, 테스트케이스를 전부 입력받아서 저장한 뒤 전부 출력할 필요는 없다. 테스트케이스를 하나 받은 뒤 하나 출력해도 된다.
자세한 설명 및 다른 언어의 경우는 이 글에 설명되어 있다.
이 블로그 글에서 BOJ의 기타 여러 가지 팁을 볼 수 있다.
입력
첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.
출력
각 테스트케이스마다 A+B를 한 줄에 하나씩 순서대로 출력한다.
풀이
이전 문제들에서 언급했던 for문 다중 출력 시간초과 관련 문제인데
줄바꿈으로 분할된 내용을 for문 내부에서 number type으로 바꿔준 다음
구조분해할당으로 a, b값을 나눠주고 합한 결과를 result 배열에 담아 한번에 출력하면 해결할 수 있다.
배열 방식으로 처리하고 싶지 않다면 수동으로 아래와 같이 처리해도 된다.
let result = ''
result += sum + '\n'
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n')
const result = []
for(i = 1 ; i < input.length ; i++){
const [a, b] = input[i].split(' ').map(Number)
result.push(a+b)
}
console.log(result.join('\n'))
const input = `5
1 1
12 34
5 500
40 60
1000 1000`.split('\n')
const result = []
for(i = 1 ; i < input.length ; i++){
const [a, b] = input[i].split(' ').map(Number)
result.push(a+b)
}
console.log(result.join('\n'))'알고리즘 > 백준' 카테고리의 다른 글
| [백준 JS] 1085번 직사각형에서 탈출 (0) | 2023.03.09 |
|---|---|
| [백준 JS] 24751번 Betting (0) | 2023.03.09 |
| [백준 JS] 11945번 뜨거운 붕어빵 (0) | 2023.03.09 |
| [백준 JS] 11720번 숫자의 합 (0) | 2023.03.09 |
| [백준 JS] 10808번 알파벳 개수 (0) | 2023.03.09 |
