1. Intro: 왜 다시 반복문인가?
최근 **정보처리기사 4과목(프로그래밍 언어 활용)**을 공부하며 파이썬으로만 풀었던 백준 문제들을 **C++**로 다시 풀어보고 있습니다. IoT 실무에서는 하드웨어 제어를 위해 C/C++ 성능 최적화가 필수적이기 때문입니다. 단순히 '정답'을 맞히는 것을 넘어, 각 언어의 입출력 메커니즘 차이를 이해하는 데 집중했습니다.
2. C++ 개발 환경 트러블슈팅: "LNK2005" 에러 해결
이번 학습 중 가장 큰 수확은 Visual Studio의 프로젝트 구조를 이해한 것입니다.
문제 발생: 기존 FileName.c와 새 소스1.cpp에 각각 main 함수가 있어 빌드 오류 발생. 해결 방법: C++ 프로젝트 내에서 main 함수는 유일해야 함을 인지하고, 사용하지 않는 파일은 [프로젝트에서 제외] 처리하여 해결했습니다.
3. 핵심 기술: 언어별 입출력 최적화 (Fast I/O)
백준의 많은 데이터를 처리하기 위해 각 언어별로 적용한 '치트키' 코드입니다.
🐍 Python: sys.stdin.readline & 타입 힌트
파이썬은 간결함이 무기입니다. 특히 함수의 매개변수에 : list와 같은 타입 힌트를 사용하여 가독성을 높였습니다.
Python
import sys
input = sys.stdin.readline
def LMul(data: list):
print(sum(map(int, data)))
⚙️ C++: ios::sync_with_stdio(false)
C++의 cin/cout은 기본적으로 C의 stdio와 동기화되어 느립니다. 이를 해제하여 성능을 극대화했습니다.
C++
ios::sync_with_stdio(false);
cin.tie(NULL);
4. 실전 코드 분석: A+B - 4 (EOF 처리)
입력의 끝(End of File)이 주어지지 않았을 때 처리하는 방식의 차이가 인상적이었습니다.
- Python: for line in sys.stdin 이터레이터를 활용해 우아하게 처리.
- C++: while (cin >> a >> b) 구문을 통해 cin의 불리언 반환값으로 종료 시점 판단.
[C++ 최종 코드]
C++
#include <iostream>
using namespace std;
void LMul(int a, int b) {
cout << a + b << "\n";
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
int a, b;
while (cin >> a >> b) {
LMul(a, b);
}
return 0;
}
5. Learning Point & Next Step
- 배운 점: 파이썬의 편리함(f-string 정렬 등)과 C++의 구조적 엄격함(타입 명시, 프로젝트 관리)을 동시에 익히며 알고리즘 사고력이 확장됨을 느꼈습니다.
- 다음 목표: 다음 단계인 1차원 배열로 넘어갈 예정입니다.
'코딩테스트 > 백준' 카테고리의 다른 글
| [C/Python] 2차원 배열 (0) | 2026.03.04 |
|---|---|
| [C/Python] 심화1 (0) | 2026.03.04 |
| [C/Python] 문자열 (0) | 2026.03.02 |
| [C/Python] 1차원 배열 (0) | 2026.03.01 |
| [C/Python] 조건문 (0) | 2026.02.25 |