입력 기초: cin · scanf · input
공식
입력이란?
대부분의 문제는 표준 입력(standard input) 으로 데이터를 받습니다. 키보드로
직접 치는 대신, 채점기가 미리 준비한 입력을 프로그램에 흘려 넣어 줍니다.
1. 정수 한 개 / 여러 개 읽기
C++
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b; // 공백·줄바꿈으로 구분된 두 정수
cout << a + b << '\n';
}
Python
a, b = map(int, input().split())
print(a + b)
cin >>은 공백과 줄바꿈을 알아서 건너뛰며 값을 읽습니다. 파이썬의
input()은 한 줄을 통째로 읽으므로, split()으로 자르고 map(int, ...)로
정수로 바꿔 줍니다.
2. 정해진 개수(N개) 읽기
int n;
cin >> n;
long long sum = 0;
for (int i = 0; i < n; i++) {
int x; cin >> x;
sum += x;
}
cout << sum << '\n';
n = int(input())
nums = list(map(int, input().split())) # 한 줄에 N개가 주어질 때
print(sum(nums))
3. 한 줄짜리 문자열 / 끝까지 읽기
띄어쓰기가 포함된 한 줄을 통째로 읽을 땐:
string line;
getline(cin, line); // 줄 전체(공백 포함)를 읽는다
입력이 몇 줄인지 모를 때(EOF까지):
int x;
while (cin >> x) { // 더 읽을 게 없으면 반복 종료
// x 처리
}
import sys
for line in sys.stdin: # 줄 단위로 끝까지
x = int(line)
# x 처리
4. cin >> 다음 getline을 쓸 때 주의
int n; cin >> n;
cin.ignore(); // 줄바꿈 하나를 버려야 함!
string s; getline(cin, s);
cin >> n은 숫자만 읽고 줄바꿈을 입력 버퍼에 남깁니다. 곧바로
getline을 부르면 빈 줄이 읽히므로, 사이에 cin.ignore();를 넣으세요.
5. 자주 하는 실수
- 입력 형식 무시 — "첫 줄에 N, 둘째 줄에 N개의 수"인데 한 줄에서 다 읽으려다 틀리는 경우. 문제의 입력 형식을 그대로 따라가세요.
- 숫자/문자 혼합 입력에서 줄바꿈 처리 — 위 4번의
cin.ignore()문제. - 느린 입력 — 수가 수십만 개면
cin도 느려질 수 있습니다. 다음 글 빠른 입출력을 보세요.
연습 팁
입력을 읽기 전에 문제의 입력 형식을 손으로 적어 보세요. "몇 줄? 각 줄에
몇 개? 정수인가 문자열인가?" 이 세 가지만 정리하면 입력 코드는 거의 기계적으로
나옵니다.