Menu
Coddy logo textTech

의사코드 예제

첫 OUTPUT부터 버블 정렬까지, Cambridge IGCSE와 A-Level 의사코드로 푼 예제 15개입니다. 예제마다 출력이 나와 있고, 아래 에디터에서 직접 실행할 수 있습니다.

예제 읽는 방법

의사코드는 실제 프로그래밍 언어의 엄격한 규칙 없이, 구조화된 영어로 프로그램의 단계를 적는 방법입니다. 아래 예제는 모두 IGCSE와 A-Level 시험에서 쓰는 Cambridge 방식을 따릅니다. 변수에는 DECLARE, 대입에는 ←, 출력에는 OUTPUT을 쓰고, 블록은 ENDIF, NEXT, ENDWHILE로 닫습니다.

예제마다 문제, 의사코드, 그 출력, 동작 원리 설명이 차례로 나옵니다. ‘에디터에서 실행하기’를 누르면 해당 예제가 페이지 맨 위의 에디터로 불러와지고, 거기서 한 줄씩 진행하며 변수가 바뀌는 모습을 볼 수 있습니다. 문법이 처음이라면 의사코드 편집기에서 모든 구문을 클릭 한 번으로 넣을 수 있는 라이브러리를 이용하세요.

1. Hello, World

화면에 메시지를 출력합니다.

의사코드
OUTPUT "Hello, World!"
출력
Hello, World!

OUTPUT은 뒤에 오는 내용을 출력하며, 텍스트는 큰따옴표 안에 씁니다. 이 한 줄이 완전한 프로그램입니다. 의사코드에는 main 함수도, import도 필요 없습니다.

2. 두 수 더하기

정수 두 개를 저장하고 더한 뒤 합계를 출력합니다.

의사코드
DECLARE a : INTEGER
DECLARE b : INTEGER
DECLARE total : INTEGER
a ← 12
b ← 30
total ← a + b
OUTPUT "The total is ", total
출력
The total is 42

각 변수는 사용하기 전에 이름과 자료형을 함께 선언합니다. 화살표 ←는 값을 저장하므로, total ← a + b는 "total에 a 더하기 b를 넣는다"로 읽으면 됩니다. OUTPUT 안의 쉼표는 텍스트와 값을 한 줄로 이어 줍니다.

3. 짝수와 홀수

어떤 수가 짝수인지 홀수인지 판별합니다.

의사코드
DECLARE n : INTEGER
n ← 17
IF n MOD 2 = 0 THEN
    OUTPUT n, " is even"
ELSE
    OUTPUT n, " is odd"
ENDIF
출력
17 is odd

MOD는 나눗셈의 나머지를 구합니다. 짝수는 2로 나누면 나머지가 없으므로 n MOD 2 = 0으로 검사합니다. IF는 두 갈래 중 하나를 고르고 ENDIF가 블록을 닫습니다. 의사코드에서 = 하나는 두 값을 비교할 뿐, 대입하지 않습니다.

4. 시험 점수로 등급 매기기

100점 만점 점수를 등급으로 바꿉니다. 80점 이상은 A, 60점부터 79점은 B, 60점 미만은 C입니다.

의사코드
DECLARE score : INTEGER
DECLARE grade : CHAR
score ← 74
IF score >= 80 THEN
    grade ← 'A'
ELSE
    IF score >= 60 THEN
        grade ← 'B'
    ELSE
        grade ← 'C'
    ENDIF
ENDIF
OUTPUT "Score ", score, " gets grade ", grade
출력
Score 74 gets grade B

가장 높은 기준부터 차례로 검사하므로, 74점은 첫 번째 검사에서 떨어지고 두 번째 검사를 통과합니다. 한 조건문의 ELSE 안에 다른 IF를 넣는 것이 Cambridge 의사코드에서 else if 연쇄를 쓰는 방법입니다. CHAR는 작은따옴표 안의 문자 하나를 담습니다.

5. 1부터 10까지 더하기

1부터 10까지의 모든 정수를 더합니다.

의사코드
DECLARE total : INTEGER
DECLARE i : INTEGER
total ← 0
FOR i ← 1 TO 10
    total ← total + i
NEXT i
OUTPUT "Sum of 1 to 10 is ", total
출력
Sum of 1 to 10 is 55

FOR 반복문은 정해진 횟수만큼 실행됩니다. i는 1, 2, 3을 거쳐 10까지의 값을 차례로 갖고, NEXT i가 반복 본문의 끝을 표시합니다. 누적 합계는 0에서 시작해 반복할 때마다 커집니다. 답인 55는 공식 n(n + 1) / 2와 일치합니다.

6. 구구단 출력하기

7단의 처음 다섯 줄을 출력합니다.

의사코드
DECLARE i : INTEGER
FOR i ← 1 TO 5
    OUTPUT "7 x ", i, " = ", 7 * i
NEXT i
출력
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35

반복 카운터 i를 계산 안에서 사용하므로 반복할 때마다 다른 줄이 출력됩니다. OUTPUT은 쉼표로 여러 텍스트와 여러 값을 이어 붙일 수 있습니다.

7. WHILE 반복문으로 카운트다운

5부터 1까지 거꾸로 센 뒤 마지막 메시지를 출력합니다.

의사코드
DECLARE count : INTEGER
count ← 5
WHILE count > 0 DO
    OUTPUT count
    count ← count - 1
ENDWHILE
OUTPUT "Liftoff!"
출력
5
4
3
2
1
Liftoff!

WHILE 반복문은 매번 반복하기 전에 조건을 검사하고, 조건이 거짓이 되는 즉시 멈춥니다. 여기서 조건은 count > 0이고, 본문은 매번 count를 1씩 줄입니다. 줄이는 줄을 빼먹으면 반복이 끝나지 않습니다. 몇 번 반복해야 할지 미리 모를 때 WHILE을 쓰세요.

8. 배열에서 가장 큰 수 찾기

숫자 여섯 개가 든 목록에서 가장 큰 값을 찾습니다.

의사코드
DECLARE nums : ARRAY[1:6] OF INTEGER
DECLARE i : INTEGER
DECLARE largest : INTEGER
nums[1] ← 14
nums[2] ← 3
nums[3] ← 27
nums[4] ← 9
nums[5] ← 21
nums[6] ← 6
largest ← nums[1]
FOR i ← 2 TO 6
    IF nums[i] > largest THEN
        largest ← nums[i]
    ENDIF
NEXT i
OUTPUT "The largest number is ", largest
출력
The largest number is 27

ARRAY[1:6]은 1부터 6까지 번호가 붙은 칸 여섯 개를 선언합니다. Cambridge 배열은 보통 1부터 시작하기 때문입니다. 프로그램은 첫 번째 원소를 가장 크다고 가정한 뒤, 나머지 원소를 하나씩 비교해 더 큰 값을 남깁니다. 배열을 한 번 훑고 나면 largest에 답이 들어 있습니다.

9. 평균 구하기

시험 점수 네 개의 평균을 구합니다.

의사코드
DECLARE marks : ARRAY[1:4] OF INTEGER
DECLARE i : INTEGER
DECLARE total : INTEGER
marks[1] ← 70
marks[2] ← 85
marks[3] ← 64
marks[4] ← 91
total ← 0
FOR i ← 1 TO 4
    total ← total + marks[i]
NEXT i
OUTPUT "Average mark: ", total / 4
출력
Average mark: 77.5

반복문이 배열의 모든 원소를 total에 더하고, 프로그램은 그 합을 점수 개수로 나눕니다. / 연산자는 소수 결과를 내므로 출력이 77.5입니다. 정수 나눗셈을 원할 때는 대신 DIV를 쓰세요.

11. 버블 정렬

숫자 다섯 개를 오름차순으로 정렬합니다.

의사코드
DECLARE nums : ARRAY[1:5] OF INTEGER
DECLARE i : INTEGER
DECLARE j : INTEGER
DECLARE temp : INTEGER
nums[1] ← 5
nums[2] ← 1
nums[3] ← 4
nums[4] ← 2
nums[5] ← 8
FOR i ← 1 TO 4
    FOR j ← 1 TO 5 - i
        IF nums[j] > nums[j + 1] THEN
            temp ← nums[j]
            nums[j] ← nums[j + 1]
            nums[j + 1] ← temp
        ENDIF
    NEXT j
NEXT i
FOR i ← 1 TO 5
    OUTPUT nums[i]
NEXT i
출력
1
2
4
5
8

버블 정렬은 이웃한 두 값을 비교해 순서가 틀리면 서로 바꿉니다. 바깥 반복이 한 번 끝날 때마다 남은 값 중 가장 큰 값이 맨 끝으로 가므로, 안쪽 반복은 매번 한 원소씩 일찍 멈출 수 있습니다. 값을 바꾸려면 한 값을 잠시 보관할 세 번째 변수 temp가 필요합니다.

이 알고리즘을 애니메이션으로 보기

12. 함수로 팩토리얼 구하기

n 팩토리얼(n!)을 반환하는 함수를 작성하고, 그 함수로 5!을 계산합니다.

의사코드
FUNCTION Factorial(n : INTEGER) RETURNS INTEGER
    DECLARE result : INTEGER
    DECLARE i : INTEGER
    result ← 1
    FOR i ← 2 TO n
        result ← result * i
    NEXT i
    RETURN result
ENDFUNCTION

OUTPUT "5! = ", Factorial(5)
출력
5! = 120

FUNCTION은 매개변수를 받아 작업을 한 뒤 RETURN으로 값을 돌려주며, 머리 부분에 반환 자료형을 적습니다. 함수 안에서 선언한 변수는 함수가 실행되는 동안에만 존재합니다. 5!은 5 × 4 × 3 × 2 × 1, 곧 120입니다.

13. 단어의 모음 개수 세기

PSEUDOCODE라는 단어에 모음이 몇 개 들어 있는지 셉니다.

의사코드
DECLARE word : STRING
DECLARE letter : CHAR
DECLARE vowels : INTEGER
DECLARE i : INTEGER
word ← "PSEUDOCODE"
vowels ← 0
FOR i ← 1 TO LENGTH(word)
    letter ← SUBSTRING(word, i, 1)
    IF letter = 'A' OR letter = 'E' OR letter = 'I' OR letter = 'O' OR letter = 'U' THEN
        vowels ← vowels + 1
    ENDIF
NEXT i
OUTPUT word, " has ", vowels, " vowels"
출력
PSEUDOCODE has 5 vowels

LENGTH는 문자열의 글자 수를 알려 주고, SUBSTRING(word, i, 1)은 위치 i에서 시작하는 글자 하나를 꺼냅니다. 반복문이 모든 글자를 차례로 확인하며, 글자가 A, E, I, O, U 중 하나이면 카운터에 1을 더합니다.

14. FizzBuzz

1부터 15까지의 수를 출력하되, 3의 배수에는 Fizz, 5의 배수에는 Buzz, 둘 다의 배수에는 FizzBuzz를 출력합니다.

의사코드
DECLARE i : INTEGER
FOR i ← 1 TO 15
    IF i MOD 15 = 0 THEN
        OUTPUT "FizzBuzz"
    ELSE
        IF i MOD 3 = 0 THEN
            OUTPUT "Fizz"
        ELSE
            IF i MOD 5 = 0 THEN
                OUTPUT "Buzz"
            ELSE
                OUTPUT i
            ENDIF
        ENDIF
    ENDIF
NEXT i
출력
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz

검사 순서가 중요합니다. 15는 3의 배수이면서 5의 배수이므로 15에 대한 검사가 먼저 와야 합니다. 그렇지 않으면 프로그램은 Fizz를 출력하고 FizzBuzz에는 영영 도달하지 못합니다. 바로 이런 추론을 확인하기 때문에 면접 워밍업 문제로 자주 나옵니다.

15. REPEAT UNTIL로 비밀번호 시도하기

비밀번호를 최대 세 번까지 차례로 시도하고, 그중 하나가 맞으면 접근을 허용합니다.

의사코드
DECLARE attempts : ARRAY[1:3] OF STRING
DECLARE tries : INTEGER
DECLARE guess : STRING
attempts[1] ← "hunter1"
attempts[2] ← "letmein"
attempts[3] ← "open sesame"
tries ← 0
REPEAT
    tries ← tries + 1
    guess ← attempts[tries]
    OUTPUT "Try ", tries, ": ", guess
UNTIL guess = "open sesame" OR tries = 3
IF guess = "open sesame" THEN
    OUTPUT "Access granted"
ELSE
    OUTPUT "Locked out"
ENDIF
출력
Try 1: hunter1
Try 2: letmein
Try 3: open sesame
Access granted

REPEAT ... UNTIL 반복문은 끝에서 조건을 검사하므로 본문이 적어도 한 번은 실행됩니다. 비밀번호가 맞거나 세 번째 시도가 끝나면 멈춥니다. 입력 없이 예제가 실행되도록 추측값을 배열에서 가져오지만, 시험 답안에서는 보통 INPUT으로 하나씩 읽습니다.

의사코드 예제 자주 묻는 질문

의사코드 예시에는 어떤 것이 있나요?

짧은 예로 시험 합격 여부를 판단하는 코드가 있습니다: IF score >= 50 THEN OUTPUT "Pass" ELSE OUTPUT "Fail" ENDIF. 거의 영어처럼 읽히지만 정해진 규칙을 따르므로 Python, Java 등 어떤 언어로든 한 줄씩 옮길 수 있습니다. 이 페이지의 프로그램 15개는 한 줄짜리부터 탐색과 정렬까지 다룹니다.

의사코드는 어떻게 작성하나요?

프로그램이 해야 할 일을 정한 뒤, 몇 가지 키워드로 단계를 순서대로 적습니다. 변수에는 DECLARE, 대입에는 ←, 판단에는 IF, 반복에는 FOR나 WHILE, 결과에는 OUTPUT을 씁니다. 모든 블록의 본문은 들여쓰고, 끝 키워드로 닫으며, 한 줄에는 동작 하나만 적으세요.

의사코드는 시험마다 똑같나요?

아닙니다. Cambridge(IGCSE와 A-Level)는 DECLARE와 화살표 ←를 쓰고, AQA는 선언 없이 ←를 쓰며, OCR의 Exam Reference Language는 Python과 비슷하고, Edexcel은 SET ... TO로 씁니다. 이 페이지의 예제는 Cambridge 방식이며, 의사코드 편집기에서는 네 가지 방식을 모두 전환할 수 있습니다.

의사코드를 실행할 수 있나요?

네, 이 페이지에서 실행할 수 있습니다. 의사코드는 실제 프로그래밍 언어가 아니어서 공식 컴파일러는 없지만, 여기 에디터는 Cambridge 의사코드를 브라우저에서 실행하고 출력을 보여 주며 한 줄씩 따라가게 해 줍니다. 원하는 예제 아래의 ‘에디터에서 실행하기’를 누르세요.

의사코드와 순서도는 어떻게 다른가요?

둘 다 코드를 짜기 전에 알고리즘을 설명합니다. 순서도는 단계를 상자와 화살표로 그리며, 판단이 몇 개뿐인 짧은 과정에 알맞습니다. 의사코드는 단계를 구조화된 텍스트로 적어서 긴 프로그램에도 쓸 수 있고, 실제 코드로 더 바로 옮길 수 있습니다.

의사코드에서 변수를 꼭 선언해야 하나요?

Cambridge 의사코드에서는 그렇습니다. 채점 기준은 변수를 쓰기 전에 DECLARE name : TYPE이 있기를 기대합니다. AQA 같은 다른 방식은 선언을 생략합니다. 변수를 선언하면 그 변수가 어떤 자료형의 값을 담는지도 읽는 사람에게 알려 줍니다.

Coddy 프로그래밍 언어 일러스트

Coddy에서 의사코드를 실제 코드로 옮겨 보세요

시작하기