본문 바로가기

코딩테스트/백준

[C/Python]반복문

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