의사코드 예제
첫 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 ", totalThe 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"
ENDIF17 is oddMOD는 나눗셈의 나머지를 구합니다. 짝수는 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 ", gradeScore 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 ", totalSum of 1 to 10 is 55FOR 반복문은 정해진 횟수만큼 실행됩니다. 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 i7 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 ", largestThe largest number is 27ARRAY[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 / 4Average mark: 77.5반복문이 배열의 모든 원소를 total에 더하고, 프로그램은 그 합을 점수 개수로 나눕니다. / 연산자는 소수 결과를 내므로 출력이 77.5입니다. 정수 나눗셈을 원할 때는 대신 DIV를 쓰세요.
10. 선형 탐색
이름 목록에서 Dara라는 이름의 위치를 찾습니다.
DECLARE names : ARRAY[1:5] OF STRING
DECLARE i : INTEGER
DECLARE found : BOOLEAN
names[1] ← "Ana"
names[2] ← "Ben"
names[3] ← "Chen"
names[4] ← "Dara"
names[5] ← "Eli"
found ← FALSE
i ← 1
WHILE i <= 5 AND found = FALSE DO
IF names[i] = "Dara" THEN
found ← TRUE
ELSE
i ← i + 1
ENDIF
ENDWHILE
IF found = TRUE THEN
OUTPUT "Dara is at position ", i
ELSE
OUTPUT "Not found"
ENDIFDara is at position 4선형 탐색은 처음부터 원소를 하나씩 확인합니다. WHILE 조건은 이름을 찾았을 때나 모든 원소를 확인했을 때 반복을 멈추고, 플래그 found가 둘 중 어느 쪽이었는지 기록합니다. 정렬되지 않은 데이터에도 쓸 수 있지만, 목록이 길면 원소 수만큼 비교해야 할 수도 있습니다.
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 i1
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! = 120FUNCTION은 매개변수를 받아 작업을 한 뒤 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 vowelsLENGTH는 문자열의 글자 수를 알려 주고, 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 i1
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"
ENDIFTry 1: hunter1
Try 2: letmein
Try 3: open sesame
Access grantedREPEAT ... 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 같은 다른 방식은 선언을 생략합니다. 변수를 선언하면 그 변수가 어떤 자료형의 값을 담는지도 읽는 사람에게 알려 줍니다.