프로그래밍 오리엔테이션
환영합니다
프로그래밍을 배운다는 건, 단순히 문법을 외우는 것이 아닙니다.
복잡한 문제를 논리적으로 쪼개서 단계별로 해결하는 힘을 기르는 과정입니다.
컴퓨터는 지시에 따라 빠르게 계산해 주는 도구일 뿐이며, 문제를 분석하고 해결 방법을 설계하는 주체는 여러분입니다.
우리는 파이썬(Python)을 도구로 사용하여 논리적 사고력과 문제 해결력을 키우는 것을 목표로 합니다.
1. 프로그래밍 언어의 실행 원리: 컴파일러와 인터프리터
컴퓨터는 0과 1로 이루어진 기계어만 이해할 수 있습니다. 우리가 작성한 소스코드를 기계어로 번역하는 방식에 따라 크게 두 가지로 분류합니다.
| 구분 | 컴파일러 (Compiler) | 인터프리터 (Interpreter) |
|---|---|---|
| 번역 방식 | 소스코드 전체를 한 번에 기계어로 번역하여 실행 파일(.exe 등)을 생성합니다. | 소스코드를 한 줄씩 읽어가며 즉시 실행합니다. 별도의 실행 파일을 만들지 않습니다. |
| 장점 | 한 번 번역해두면 매번 번역할 필요가 없어 실행 속도가 매우 빠릅니다. | 코드 수정 후 바로 실행해 볼 수 있어 개발과 디버깅 과정이 편리합니다. |
| 단점 | 코드를 한 줄만 수정해도 전체를 다시 컴파일해야 하므로 준비 시간이 걸립니다. | 매번 한 줄씩 번역하며 실행하므로 상대적으로 실행 속도가 느립니다. |
| 대표 언어 | C, C++, Java | Python, ja |
이해를 돕는 일상 비유
컴파일러는 책 전체 번역에 해당합니다.
외국어 소설책 전체를 한국어로 완전히 번역해서 인쇄본(실행 파일)을 만들어내는 것과 같습니다. 책을 읽는 사람은 중간에 번역을 기다릴 필요 없이 아주 빠르게 끝까지 읽을 수 있습니다. 다만 소설책 중간에서 오타(코드 오류)가 한 개 발견되면, 책을 처음부터 끝까지 다시 번역하고 인쇄(재컴파일)해야 하는 번거로움이 있습니다.
인터프리터는 실시간 동시통역에 해당합니다.
외국인 강연자 옆에 서서 한 문장씩 실시간으로 통역을 해주는 것과 같습니다. 미리 만들어 둔 책은 없지만, 강연자가 이야기 도중 말을 잘못했을 때 즉시 고쳐서 말을 이어갈 수 있어 편리합니다. 그러나 들을 때마다 매번 통역을 거쳐야 하므로 전체적인 속도는 책을 읽는 것(컴파일러 방식)보다 다소 느립니다.
2. 알고리즘과 표현 방법
알고리즘이란 어떤 문제를 해결하기 위해 정해진 단계별 절차나 명령들의 모음입니다. 올바른 알고리즘이 되기 위해서는 다음 5가지 조건을 만족해야 합니다.
- 입력: 외부에서 제공되는 0개 이상의 입력값이 있어야 합니다.
- 출력: 최소 1개 이상의 결과를 내놓아야 합니다.
- 명확성: 각 명령은 모호하지 않고 명확해야 합니다.
- 유한성: 한정된 단계를 거친 후에는 반드시 종료되어야 합니다.
- 수행 가능성: 모든 명령은 컴퓨터나 사람이 실제로 실행할 수 있어야 합니다.
알고리즘의 표현 도구
알고리즘은 주로 세 가지 방법으로 표현합니다.
- 자연어 (Natural Language): 우리가 일상적으로 사용하는 언어(한국어, 영어 등)로 절차를 기술합니다. 이해하기 쉬우나 모호성이 발생할 수 있습니다.
- 의사코드 (Pseudocode): 프로그래밍 언어의 문법 구조를 본떠 컴퓨터 코딩처럼 작성하되, 컴파일러 제약 없이 논리 구조에 집중해 작성합니다.
- 순서도 (Flowchart): 약속된 도형 기호를 사용하여 제어의 흐름을 시각적으로 나타냅니다. 프로그램의 전체 구조를 한눈에 파악하기 좋습니다.
순서도 기호 안내
| 도형 모양 | 기호 이름 | 의미 및 역할 |
|---|---|---|
| 단자 (타원) | 알고리즘의 시작점과 종료점을 나타냅니다. | |
| 데이터 (평행사변형) | 키보드로 값을 입력받거나 화면에 결과를 출력하는 단계를 나타냅니다. | |
| 처리 (직사각형) | 변수에 값을 대입하거나 사칙연산, 데이터 가공 등 일반적인 처리를 수행합니다. | |
| 판단 (마름모) | 조건식을 평가하여 결과(예 / 아니오)에 따라 실행 경로를 분기합니다. | |
| 흐름선 (화살표) | 명령어의 실행 순서 및 방향을 화살표로 연결해 줍니다. |
3. 온라인 저지(OJ) 사용법
온라인 저지(Online Judge)는 코드를 제출하면 채점기가 자동으로 실행하여 정답 여부를 가려내는 시스템입니다.
알고리즘 문제 풀이 흐름
- 문제 읽기 — 무엇이 입력으로 들어오고, 어떤 형태로 출력해야 하는지 조건을 분석합니다.
- 알고리즘 설계 — 코딩을 시작하기 전에, 문제 해결을 위한 로직을 머릿속으로 그리거나 의사코드 형태로 설계해 봅니다.
- 코드 구현 & 제출 — 선택 언어를 Python3로 확인하고 완성된 소스코드를 제출합니다.
- 판정 확인 & 디버깅 — 오류가 생기면 메시지를 확인하고 코드를 수정한 뒤 다시 제출합니다.
채점 판정 결과 요약
| 결과 | 의미와 해결 방법 |
|---|---|
| 맞았습니다 (AC) | 모든 테스트 케이스의 입력을 받아 정답을 출력했습니다. |
| 틀렸습니다 (WA) | 출력 형식이 다르거나 오답이 섞여 있습니다. 공백, 줄바꿈, 엣지 케이스를 다시 확인하세요. |
| 런타임 에러 (RE) | 실행 중 에러로 종료되었습니다. 주로 ZeroDivision |
| 컴파일 에러 (CE) | 구문 오류가 발견되었습니다. 오타나 파이썬 특유의 들여쓰기(Indentation |
| 시간 초과 (TLE) | 수행 시간이 제한을 넘었습니다. 무한 루프가 돌고 있거나 프로그램의 논리 구조가 비효율적인지 검토해야 합니다. |
4. 자주 하는 실수
채점 서버는 입력값만 주입하며 결과물의 표준 출력값만을 1:1 대조합니다. input("숫자를 입력하세요: ") 형태는 출력 텍스트에 "숫자를 입력하세요: "가 섞여 나와 오답으로 분류됩니다.
# 잘못된 예 (안내 문구 포함)
n = int(input("정수를 입력하세요: "))
# 올바른 예 (입력 기능만 실행)
n = int(input())
코드를 보낼 때 언어 설정 드롭다운 메뉴에서 Python3이 올바르게 선택되었는지 반드시 확인해야 합니다.
제출 결과 화면에서 붉은색 링크(CE, RE 등)를 클릭하면 백엔드 채점기에서 생성된 실제 예외 스택 트레이스나 오류 라인을 볼 수 있으므로 자가 디버깅에 가장 유용한 도구입니다.
5. AI 힌트 기능 활용하기
오답 판정(WA, TLE, MLE, OLE, RE, CE)을 받았을 때 스스로 문제를 해결하기 어렵다면 AI 힌트의 도움을 받을 수 있습니다.
제출 결과 화면에서 채점 판정 링크(WA, TLE 등)나 컴파일 에러 링크(CE)를 클릭하여 상세 페이지로 이동한 뒤, 화면에 표시된 AI 힌트 요청 버튼을 클릭합니다.
AI는 정답 코드를 직접 제공하거나 소스코드를 대신 수정해주지 않습니다. 대신 여러분이 코드에서 어떤 논리적 오류를 범했는지 스스로 깨닫도록 돕는 2~3문장의 안내용 질문을 제시합니다.
제출한 답안당 최대 2회까지만 힌트를 요청할 수 있습니다. 힌트를 확인한 후 코드를 수정하여 다시 제출하면 횟수가 초기화되어 새로운 코드에 대한 힌트를 다시 받아볼 수 있습니다.
6. 실습 가이드: Python IDLE 및 BFOJ 첫 제출하기
아래 슬라이드를 넘겨보며 파이썬 개발 환경(IDLE) 실행 방법과 온라인 저지 로그인 및 첫 문제 제출 과정을 직접 따라 해보세요.