목차

가이드

가입부터 문제 풀기, 한 줄씩 따라가는 해설 화면 읽는 법, 점수·랭킹을 먼저 안내하고, 북마크·오답노트·모의고사 같은 학습 도구와 커뮤니티·계정 관리는 뒤에서 다뤄요. 프로그래밍 용어가 낯설어도 괜찮아요 — 그림은 모두 실제 해설 화면과 같은 부품으로 그렸어요.

① 시작하기

  1. 회원가입: 세 가지 방법 중 하나로 가입해요.
    • 이메일: 이메일·닉네임 중복확인을 하고, 비밀번호를 정한 뒤 가입 신청. 비밀번호는 8~72자이고 영문·숫자·특수문자를 각각 1개 이상 넣어야 해요.
    • Google 또는 카카오(화면에 버튼이 보일 때): 버튼을 누르고 처음 로그인하면 그대로 가입 신청이 돼요.

    가입할 때 인증 메일은 보내지 않아요. 메일 인증 대신 관리자가 확인하고 승인해요. 메일은 비밀번호 찾기를 요청했을 때만 가요.

  2. 만 14세 이상 확인: 만 14세 이상만 가입할 수 있어요. 이메일 가입은 가입 화면에서 체크하고, Google·카카오로 가입했다면 처음 로그인했을 때 화면 위에 뜨는 안내에서 네, 만 14세 이상이에요를 눌러요.
  3. 닉네임 확인: Google·카카오로 가입하면 그 계정의 이름이 닉네임으로 들어가요. 처음에 한 번 “그대로 쓸까요?” 하고 물으니 이대로 쓸게요 또는 새 닉네임을 입력하고 바꾸기를 눌러요. 닉네임은 랭킹·게시판에 공개돼요.
  4. 승인 대기: 관리자가 확인한 뒤 승인해요. 승인 전에도 문제와 코드는 볼 수 있지만 제출(채점), 해설, 랭킹은 이용할 수 없어요. 가입한 뒤 카카오톡 오픈채팅방에 해설고래 승인요청 : [닉네임]을 보내 주시면 확인 후 승인해 드려요. 승인되면 🔔 알림으로 알려 드려요. 기다리는 동안 이 가이드를 읽어 두면 좋아요.
  5. 승인 후: 바로 모든 기능을 쓸 수 있어요. 내 닉네임과 점수는 화면 위 오른쪽에서 확인하고, 누르면 내 정보로 갈 수 있어요.

휴대폰에서는 화면 아래 탭 바(문제 · 모의고사 · 시험 후기 · 랭킹 · 더보기)로 이동해요. 더보기에는 공지·이벤트, 가이드, 내 정보, 화면 테마(다크 모드), 로그아웃이 있어요.

회원가입 하러 가기 →

1-1. 휴대폰 홈 화면에 추가하기

앱을 설치하지 않아도 홈 화면에 해설고래 아이콘을 만들어 두면 앱처럼 한 번에 들어올 수 있어요. 카카오톡 안에서 링크를 열었다면 먼저 다른 브라우저로 열기(아이폰은 Safari로 열기)를 눌러 주세요.

🍎 아이폰 (Safari)

  1. Safari로 goraejcg.com에 들어가요.
  2. 아래쪽 공유 버튼(네모에 위쪽 화살표)을 눌러요.
  3. 목록을 내려 홈 화면에 추가를 눌러요.
  4. 오른쪽 위 추가를 누르면 끝!

🤖 안드로이드 (Chrome)

  1. Chrome으로 goraejcg.com에 들어가요.
  2. 오른쪽 위 ⋮ 메뉴를 눌러요.
  3. 홈 화면에 추가(또는 앱 설치)를 눌러요.
  4. 추가를 누르면 끝!

삼성 인터넷: 아래쪽 ≡ → 현재 페이지 추가 → 홈 화면

↑ 맨 위로

② 문제 풀기

  • 문제 찾기: 문제 목록 위 검색창에 제목, #태그(예: #포인터), 문제 번호를 넣어 찾아요. 문제 카드의 태그나 자주 쓰는 태그를 눌러도 그 태그로 검색돼요.
  • 필터·정렬: 언어(C / Python / Java), 유형(출력 / 빈칸), 난이도로 고르고, 로그인하면 풀이 상태(안 푼 · 틀린 · 푼 · 북마크 문제)로도 골라요. 정렬은 번호순 · 최신순 · 난이도순이에요.
  • 목록 표시: ✓ 해결 = 맞힌 문제, ✗ 오답 = 틀린 적 있고 아직 못 맞힌 문제, 해설 열람 = 해설을 먼저 본 문제, ★ = 북마크한 문제예요.
  • 기출 유형 · 26-1 배지: 해당 회차(2026년 1회)에 출제된 개념을 새 코드로 다시 만든 문제예요. 실제 기출 원문이 아니에요. 필터의 기출 유형으로 모아 보거나 검색창에 기출·26-1을 넣어 찾을 수 있어요.
유형무엇을 쓰나채점 방식
출력 결과프로그램이 화면에 찍는 결과 전체각 줄 끝 공백과 맨 끝 빈 줄은 무시해요. 대소문자·줄바꿈 위치·줄 앞 공백은 구분해요.
빈칸 채우기( ① ) 자리에 들어갈 코드공백은 모두 지우고 비교해요(i<n과 i < n은 같은 답). 대소문자는 구분해요.
  • 출력 결과 입력 팁: 여러 줄이면 Enter로 줄을 나눠요. 쉼표·괄호·따옴표처럼 화면에 찍히는 문자는 그대로 써요.
  • 모르겠으면: 모르겠어요, 해설 보기를 누르면 해설이 열려요. 그 뒤에 맞히면 점수는 50%만 받아요.
  • 이미 푼 문제: 다시 들어오면 해설이 바로 열리지 않고 처음 상태로 보여요. 그대로 다시 제출해 연습하거나(점수 없음), 위쪽 해설 바로 보기로 바로 확인할 수 있어요. 맞힌 뒤에는 ↺ 다시 풀기, 해설을 연 뒤에는 해설 닫고 다시 풀기로 처음부터 다시 풀 수 있어요.
  • 문제 제목 옆 버튼: ☆ 북마크(⑥), 🔗 공유(휴대폰은 공유 창, PC는 링크 /problems/번호/ 복사), ⚠️ 문제 신고(⑧). 문제 아래에는 나만 보는 📝 내 메모(오답노트) 칸이 있어요.

↑ 맨 위로

③ 해설 화면 보는 법

해설은 코드를 디버거처럼 한 단계씩 실행하며 보여 줘요. 화면 한쪽엔 코드, 다른 쪽엔 그 순간의 변수와 출력이 있어요. 이 절만 읽어도 해설 화면의 거의 모든 것을 읽을 수 있어요.

3-1. 한눈에 보기

아래는 실제 해설 화면과 똑같은 부품으로 만든 예시예요. 직접 눌러서 넘겨 봐도 돼요.

19 / 17
2실행14번 줄 실행 직전
3 💡 new를 한 번 더 하면 힙에 새 상자가 하나 더 생긴다
4
1class Box {
2 int value;
3
4 Box(int value) {
5 this.value = value;
6 }
7}
8
9public class Main {
10 public static void main(String[] args) {
11 Box a = new Box(1);
12 Box b = a;
13 b.value = 5;
▶14 Box c = new Box(7);
15 System.out.println(a.value + " " + c.value);
16 }
17}

5변수 (콜 스택)

Main.main()
aBox→ @1
bBox→ @1

6힙 (객체)

heap
@1Box
Box
value5

7출력 (stdout)

(아직 출력 없음)

버튼으로 넘겨 보세요. 이 상자를 한 번 누른 뒤에는 키보드 ← → 로도 넘길 수 있어요.

예시: Java 객체 만들기 (가이드 전용 코드를 실제로 실행한 기록)
번호이름한 줄 설명
1조작 막대한 단계씩 앞뒤로, 자동 재생, 속도, 슬라이더로 원하는 단계로 이동. 키보드 ← →
2지금 단계이번 단계가 실행 / 함수 호출 / 함수 반환 / 예외 발생 중 무엇인지와 줄 번호. 반복문 줄이면 🔁 몇 번째 반복인지도 함께 나와요(3-4)
3줄 해설 💡출제자가 이 줄에 단 설명 (없는 줄도 있어요)
4코드▶ = 다음에 실행될 줄(노란 바탕), 흐린 바탕 줄 = 방금 실행한 줄
5변수 (콜 스택)지금 살아 있는 함수들과 그 안의 변수
6힙 (객체)Java의 new, C의 malloc으로 만든 것이 사는 곳 (있을 때만 나타나요)
7출력지금까지 화면에 찍힌 내용. 이번 단계에서 새로 찍힌 부분은 노란색

↑ 맨 위로

3-2. 가장 중요한 규칙: ▶는 "실행 직전"

▶가 가리키는 줄은 아직 실행되지 않았어요. 오른쪽 변수·출력은 그 줄을 실행하기 전 상태예요.

그 줄의 결과는 다음 ▶을 한 번 눌러야 보여요.

짧은 예시의 두 단계를 나란히 놓고 보면 이렇게 돼요.

단계 2실행2번 줄 실행 직전
1x = 3
▶2x = x * 2
3nums = [1, 2, 3]
4nums[1] = x
5print(x, nums)
전역
xint3

▶가 x = x * 2에 있지만 x는 아직 3 — 이 줄은 아직 실행되지 않았어요.

단계 3실행3번 줄 실행 직전
1x = 3
2x = x * 2
▶3nums = [1, 2, 3]
4nums[1] = x
5print(x, nums)
전역
xint6

한 단계 넘기자 x가 6으로 바뀌었어요. ✨ 바뀐 값은 노랗게 반짝여요.

  • 노랗게 반짝 = 직전 단계와 비교해 값이 바뀌었거나 새로 생긴 변수예요. 배열·리스트는 바뀐 칸만 반짝여요.
  • 화살표(→ arr[2], → @2)가 다른 곳을 가리키게 되거나, 힙 객체·딕셔너리에서 값이 바뀐 필드·항목도 그 줄만 반짝여요. 새로 생긴 변수와 객체는 이름까지 반짝여요.
  • 반짝임은 한 번만 지나가요. 놓쳤다면 ◀ 이전 → 다음 ▶으로 다시 보면 돼요.

직접 넘겨 보세요.

1 / 6
실행1번 줄 실행 직전
💡 x를 만든다. 오른쪽 변수 칸에 x가 새로 생긴다
▶1x = 3
2x = x * 2
3nums = [1, 2, 3]
4nums[1] = x
5print(x, nums)

변수 (콜 스택)

전역
(변수 없음)

출력 (stdout)

(아직 출력 없음)

버튼으로 넘겨 보세요. 이 상자를 한 번 누른 뒤에는 키보드 ← → 로도 넘길 수 있어요.

예시: 변수 값이 바뀌는 순간 (Python)
❓ 확인 질문:▶가 print(x, nums)에 있을 때 출력 칸에 6 [1, 6, 3]이 있을까요? (눌러서 답 보기)
아니요. ▶ 줄은 아직 실행 전이라 출력 칸은 비어 있어요. 한 번 더 넘겨야 노란색으로 새로 찍혀요.

↑ 맨 위로

3-3. 단계 표시의 네 종류

표시뜻볼 것
실행평범하게 한 줄 진행▶ 줄과 바뀐 변수
함수 호출함수에 막 들어옴콜 스택 맨 위에 새 칸이 생김, 매개변수 값
함수 반환함수가 끝나 값을 돌려줌초록 total(3)반환값6반환 표시 → 다음 단계에서 그 칸이 사라지고, 호출한 쪽에 ↩ total(3)이 6을 돌려줬어요 안내가 붙어요
예외 발생오류가 던져짐try/catch 문제에서 어느 줄에서 터졌는지

↑ 맨 위로

3-4. 반복 회차 표시 🔁

▶가 for·while 같은 반복문의 첫 줄(조건을 검사하는 줄)에 오면, 단계 표시 옆에 이번이 몇 번째 검사인지 칩이 붙어요. “지금 몇 바퀴째지?”를 손가락으로 세지 않아도 돼요.

실행🔁 3번째 반복 검사5번 줄 실행 직전
실행🔁 6번째 검사 · 반복 종료5번 줄 실행 직전
반복문 첫 줄에서 보이는 칩 (모양 예시)
표시뜻
🔁 3번째 반복 검사이 반복문 조건을 3번째로 검사하는 단계예요. 조건이 참이면 반복 본문으로 들어가요.
🔁 6번째 검사 · 반복 종료마지막 검사예요. 조건이 거짓이 되어 다음 단계에서 반복을 빠져나가요. 그래서 i = 1~5를 도는 for문은 6번째 검사에서 끝나요(본문은 5번 실행).
  • 셈하는 범위: 같은 함수 호출 안에서만 세요. 함수를 다시 부르거나(재귀 포함), 바깥 반복의 다음 바퀴에서 안쪽 반복을 새로 시작하면 1부터 다시 세요.
  • Java for문은 증감식(i++)과 조건 검사가 같은 줄에서 두 단계로 나뉘어 보여요. 두 단계는 같은 회차로 묶어 같은 번호가 나와요.
  • break로 빠져나가는 반복은 첫 줄을 다시 검사하지 않으니 “반복 종료” 칩이 붙지 않아요.
  • C·Java의 while (1)·while (true)처럼 검사할 조건이 없는 줄은 실행 단계로 잡히지 않아 칩도 나오지 않아요. 이때는 본문 첫 줄의 💡 줄 해설을 참고하세요.
  • do ~ while은 본문을 먼저 실행하고 마지막 줄 } while (조건);에서 검사하므로, 그 줄에 칩이 붙어요.

↑ 맨 위로

3-5. 변수 (콜 스택)

💭 비유:식판 쌓기. 함수를 부를 때마다 새 식판(칸)이 맨 위에 올라가고, 함수가 끝나면 맨 위 식판부터 치워요. 일은 언제나 맨 위 식판에서 해요.

화면에서는

  • 파란 테두리 칸 = 지금 실행 중인 함수(맨 위). 그 아래 칸들은 “내가 부른 함수가 끝나길 기다리는 중”이에요.
  • 칸 제목 = 함수 이름과 그 함수에 들어올 때 받은 매개변수 값. 예: main() total(3) Main.main(), 생성자 Box(3, 4), Python 맨 바깥 코드는 전역
  • total(3)은 “n에 3을 받아 시작한 호출”이라는 뜻이에요. 함수 안에서 n을 바꿔도 제목은 들어올 때의 값 그대로예요(지금 값은 칸 안의 변수를 보세요). 제목에 마우스를 올리거나 Tab으로 포커스하면 total(n=3)처럼 매개변수 이름도 보여요. 문자열은 따옴표로, 긴 값은 …로 줄여 보여요.
  • 칸 안 = 그 함수의 지역 변수와 매개변수. 이름 옆 작은 글씨는 자료형(int, int[5], str …)이에요.
  • 전역 / static 칸: C의 전역 변수, Java의 static 필드. 어느 함수에서나 같은 값을 봐요.
  • 상수 (#define) 칸: C 코드에 #define BOX 6 같은 상수가 있으면 변수 칸 맨 위에 이름과 값이 보여요. 컴파일 전에 코드 속 이름이 값으로 바뀌는 것이라 실행 중에는 바뀌지 않아요.
  • 실수형(double, float) 변수는 값이 정수여도 3.0처럼 소수점을 붙여 보여 줘요.

재귀가 이해되는 순간

가이드 예시 total(3) → total(2) → total(1)이 가장 깊이 들어간 순간의 콜 스택이에요.

total(1)
nint1
total(2)
nint2
total(3)
nint3
전역
(변수 없음)
맨 위(파란 테두리)가 지금 실행 중인 total(1)
  • 같은 이름 n이 여러 개 보이는 건 오류가 아니에요. 호출마다 자기 변수를 따로 가져요. 같은 이름이지만 다른 칸 = 다른 변수예요.
  • return할 때마다 맨 위 칸이 하나씩 사라지고, 아래 칸이 돌려받은 값으로 계산을 이어가요.

함수가 값을 돌려줄 때

함수 반환total(1)반환값1반환
total(1)반환값 1
nint1
total(2)
nint2
total(3)
nint3
전역
(변수 없음)
함수 반환↩ total(1)이 1을 돌려줬어요
total(2)반환값 3
nint2
total(3)
nint3
전역
(변수 없음)
왼쪽: total(1)의 return 단계 / 오른쪽: 한 단계 넘겨 total(2)로 돌아온 순간
  • 함수 반환 단계에는 total(1)반환값1반환처럼 어느 호출이 무엇을 돌려주는지 나오고, 끝나는 칸 제목 옆에 반환값 배지가 붙어요. 돌려줄 값이 없는 함수(void, main 등)는 “값 없이 종료”라고 나와요.
  • 한 단계 넘기면 그 칸이 사라지고, 호출한 쪽에 ↩ total(1)이 1을 돌려줬어요 안내가 붙어요. 돌려받은 값이 들어간 변수는 노랗게 반짝여요.
  • 공부 팁: 반환 단계의 초록 표시만 따라가도 결과가 조립되는 과정이 보여요 — total(1)반환값1반환 → total(2)반환값3반환 → total(3)반환값6반환

호출 트리 (재귀가 있을 때)

같은 함수가 콜 스택에 2칸 이상 쌓이거나 3번 이상 불리는 문제에서는 변수 칸 아래에 호출 트리가 나타나요. 지금 단계까지 일어난 호출이 부른 순서대로, 안쪽 호출은 들여 써서 보여요.

호출 트리지금까지 3번 · 총 3번 호출
  1. total(3) = ?
  2. ↳ total(2) = ?
  3. ↳ total(1) = 1
total(1)이 1을 돌려준 순간의 호출 트리
  • total(1) = 1: 끝난 호출은 돌려준 값이 채워져요. total(3) = ?는 아직 안쪽 호출을 기다리는 중이에요.
  • 파란 글씨는 지금 단계의 호출 경로(콜 스택과 같아요), 파란 바탕이 지금 실행 중인 호출이에요.
  • 줄을 누르면 그 호출이 시작된 단계로 이동해요. 제목 옆에는 지금까지 / 전체 호출 횟수가 나와요.
  • 처음에는 펼쳐져 있어요. “호출 트리”를 누르면 접거나 다시 펼칠 수 있어요.
1 / 15
실행1번 줄 실행 직전
▶1def total(n):
2 if n == 1:
3 return 1
4 return n + total(n - 1)
5
6print(total(3))

변수 (콜 스택)

전역
(변수 없음)
호출 트리지금까지 0번 · 총 3번 호출

아직 함수를 호출하지 않았어요.

누르면 그 호출이 시작된 단계로 이동해요. 파란 글씨는 지금 단계의 호출 경로, = ?는 아직 값을 돌려주지 않은 호출이에요.

출력 (stdout)

(아직 출력 없음)

버튼으로 넘겨 보세요. 이 상자를 한 번 누른 뒤에는 키보드 ← → 로도 넘길 수 있어요.

예시: 재귀 호출과 콜 스택 (Python)

↑ 맨 위로

3-6. 힙 (객체)

💭 비유:물건은 창고(힙)에, 변수에는 창고 번호표만. Java에서 new Box(1)을 하면 객체는 힙에 만들어지고, 변수에는 “그 객체가 어디 있는지”(참조)만 들어가요.

화면에서는

  • 변수 값이 → @1 처럼 보이면 “힙의 @1번 상자를 가리킨다”는 뜻이에요. 오른쪽 아래 힙 (객체)에서 @1을 찾아요.
  • 힙의 상자 = 객체 하나. 맨 위 회색 줄은 실제 클래스 이름, 아래는 필드와 값이에요.
  • 두 변수가 똑같이 → @1이면 같은 객체 하나를 함께 가리켜요. 한쪽에서 바꾸면 다른 쪽에서도 바뀐 값이 보여요. 아래 예시에서 b.value = 5를 실행하는 순간 힙의 @1 상자 안 value 줄이 반짝이는 걸 확인해 보세요.

변수 (콜 스택)

Main.main()
aBox→ @1
bBox→ @1

힙 (객체)

heap
@1Box
Box
value5
b = a 다음 b.value = 5 를 실행한 뒤: a와 b가 같은 @1을 가리키므로 a.value도 5
  • this도 참조예요. 생성자·메서드 안에서 this → @1 = “지금 다루는 객체는 @1”.
  • 필드 이름 옆 괄호 x (Parent), x (Child): 부모와 자식이 같은 이름의 필드를 각각 가진 경우예요. 둘은 다른 칸이에요.
heap
@1Child
Child
x (Parent)1
x (Child)0
부모·자식에 같은 이름의 필드 x가 있을 때 (모양 예시)
  • 정처기 단골 함정: 생성자 안에서 오버라이딩된 메서드 호출 → 콜 스택 맨 위가 자식 메서드로 바뀌는 순간, 자식 필드가 아직 기본값(0)인 것을 힙에서 확인해 보세요.
  • 힙 칸은 비어 있으면 아예 보이지 않아요. Python은 리스트·객체를 변수 칸 안에 바로 보여 줘서 힙 칸이 나오지 않아요.
1 / 17
실행11번 줄 실행 직전
💡 new로 만든 객체는 힙에 생기고, 변수 a에는 화살표(참조)만 들어간다
1class Box {
2 int value;
3
4 Box(int value) {
5 this.value = value;
6 }
7}
8
9public class Main {
10 public static void main(String[] args) {
▶11 Box a = new Box(1);
12 Box b = a;
13 b.value = 5;
14 Box c = new Box(7);
15 System.out.println(a.value + " " + c.value);
16 }
17}

변수 (콜 스택)

Main.main()
(변수 없음)

출력 (stdout)

(아직 출력 없음)

버튼으로 넘겨 보세요. 이 상자를 한 번 누른 뒤에는 키보드 ← → 로도 넘길 수 있어요.

예시: 객체와 참조 (Java)
❓ 확인 질문:Box b = a; 를 실행하면 힙에 상자가 하나 더 생길까요? (눌러서 답 보기)
아니요. 객체를 복사하지 않고 화살표(참조)만 복사해요. 힙에는 여전히 @1 하나뿐이고, a와 b가 둘 다 → @1이에요. 새 상자는 new를 할 때만 생겨요.

↑ 맨 위로

3-7. 포인터·참조 화살표

  • C 포인터 p int * → arr[1] = 6 = p에 arr[1]의 주소가 들어 있고, 그 칸의 값은 6 = “p가 arr[1]을 가리킨다”.
    • *p = 가리키는 곳의 값. 화살표 끝의 = 6이 바로 *p예요
    • 가리키는 배열 칸 위에는 ▼p 이름표가 붙어요. p++ 하면 화살표와 이름표가 함께 한 칸 이동해요(바뀐 화살표는 노랗게 반짝여요)
    • char * 포인터는 그 칸부터 널 문자 전까지의 문자열을 보여 줘요(예: → buf[4] = "ORK")
    • → NULL = 아무것도 가리키지 않음

p++ 하기 전

main()
arrint[3]
03
▼p
16
29
pint *→ arr[1] = 6
qint *→ NULL

p++ 한 뒤 — 화살표와 ▼p 표시가 한 칸 이동

main()
arrint[3]
03
16
▼p
29
pint *→ arr[2] = 9
qint *→ NULL
  • 이중 포인터는 화살표를 끝까지 따라가 보여 줘요. pp → p → x = 8은 “pp는 p를, p는 x를 가리키고 x의 값은 8”이라는 뜻이에요. 가리킴을 받는 변수 이름 옆에는 ← pp가 붙어요.
main()
xint← p8
pint *← pp→ x = 8
ppint **→ p → x = 8
이중 포인터: 화살표 두 번 = **pp
  • 2차원 배열은 가리키는 칸(예: a[1][1])에 이름표가 붙고, ▸ 메모리 한 줄로 보기를 누르면 실제 메모리 순서(행 우선)대로 펼쳐져요. a[0] + 4처럼 행을 넘어가는 식을 확인할 때 써요.
main()
aint[2][3]
0
04
19
22
1
07
▼p
15
28
pint *→ a[1][1] = 5
2차원 배열: 아래 버튼을 눌러 한 줄로 펼쳐 보세요
  • Java 참조와 C의 malloc 메모리도 같은 화살표 표기(→ @1)를 써요. Java에서 비어 있는 참조(null)도 → NULL로 보여요.
  • Python 변수는 화살표 없이 값(리스트·객체 포함)을 칸 안에 바로 보여 줘요.

↑ 맨 위로

3-8. 포인터 식 읽는 법

*는 “화살표를 한 번 따라간다”, &는 “그 칸의 주소(화살표를 만든다)”예요. 괄호 안쪽부터 한 겹씩 풀면 어떤 식이든 “어느 칸인지”로 바꿀 수 있어요.
식뜻예시 (int x = 5; int *p = &x; int **pp = &p;)
&xx의 주소p에 담긴 값과 같아요
*pp가 가리키는 칸의 값x의 값 5
*pppp가 가리키는 칸 = p 자체x의 주소(p에 들어 있는 값)
**pp화살표를 두 번 따라간 값*p와 같아서 5. **pp = 8 하면 x가 8
배열 식같은 뜻기억할 점
p + 1&p[1]1바이트가 아니라 자료형 한 칸 뒤의 주소
*(p + i)p[i]p가 몇 번 칸에서 시작하는지 먼저 확인
a[i]*(a + i)2차원 배열에서는 i행 첫 칸의 주소
*(*(a + i) + j)a[i][j]안쪽부터: a+i(i행) → *(…)=a[i] → +j → *로 값
*(a[0] + k)k번째 칸(행 우선)열 수가 3이면 k=4는 a[1][1] — 행이 이어져 있음
p->x(*p).x구조체 포인터로 멤버 읽기
  • 해설 화면에서는 화살표 끝 값(= …)과 ▼ 이름표로 식의 답을 바로 확인할 수 있어요. 시험장에서는 위 표처럼 한 겹씩 바꿔 쓰는 연습을 해 두세요.

↑ 맨 위로

3-9. 값 읽는 법

모양뜻
010
120
230
배열/리스트. 칸 위 작은 숫자가 인덱스(0부터)
"a b"문자열 (따옴표가 있어 공백도 보여요)
'A'C/Java 문자 하나 (char)
TrueNonePython의 참/거짓, 값 없음
true→ NULLJava의 참/거짓, 비어 있는 참조(null)
"a"1
"b"2
딕셔너리(dict): 왼쪽 키, 오른쪽 값
01
16
23
배열 칸 하나만 반짝 = 그 인덱스만 바뀜

↑ 맨 위로

3-10. 출력 (stdout)

  • 프로그램이 지금까지 화면에 찍은 전부가 쌓여 보여요.
  • 노란 글씨 = 이번 단계에서 새로 찍힌 부분. 어느 줄이 무엇을 찍었는지 바로 연결돼요.
  • 출력 결과 문제를 틀렸다면: 마지막 단계의 출력과 내 답을 한 글자씩 비교해 보세요(공백·줄바꿈 위치).
1 2
3 4
두 번째 줄 '3 4'가 이번 단계에서 새로 찍힌 부분

↑ 맨 위로

3-11. 조작법

하고 싶은 것방법
한 단계 앞/뒤다음 ▶ / ◀ 이전, 키보드 → / ←
처음·끝으로⏮ / ⏭, 키보드 Home / End
원하는 지점으로슬라이더 끌기
저절로 넘기기▶ 재생 (누르면 ⏸ 정지로 바뀜), 속도 느리게/보통/빠르게

↑ 맨 위로

3-12. 언어별로 다르게 보이는 점

C

맨 아래 칸
main()
자주 보는 것

배열 칸, 포인터 화살표

03
16
29
→ arr[1]
주의
printf는 \n을 써야 줄이 바뀌어요

Python

맨 아래 칸
전역
자주 보는 것

리스트·딕셔너리, 재귀 칸

01
12
"k"1
주의
print는 끝에 자동으로 줄을 바꿔요

Java

맨 아래 칸
Main.main()
자주 보는 것

힙 객체, this, static, 생성자 칸

→ @1"hi"
주의
print는 줄을 안 바꾸고 println은 바꿔요

↑ 맨 위로

3-13. 추천 공부 순서

  1. 먼저 손(종이)으로 끝까지 추적해서 답을 내요.
  2. 해설에서 ▶ 재생으로 한 번 전체 흐름을 봐요.
  3. 내 추적과 달라지는 지점을 슬라이더로 찾아 그 단계에서 멈춰요 — 어떤 변수가 예상과 다른지.
  4. 함수 호출 / 함수 반환 단계와 노랗게 반짝이는 값만 골라 다시 봐요. 반복문은 🔁 2번째 반복 검사 칩으로 내가 센 회차와 맞는지 확인해요.
  5. 핵심 정리로 개념을 정리하고, 내 말로 학습자 해설을 남겨요. 헷갈린 점은 📝 내 메모(오답노트)에 적어 두면 나중에 모아 볼 수 있어요.

↑ 맨 위로

④ 핵심 정리와 학습자 해설

  • 핵심 정리: 출제자가 쓴 요약이에요. 정답을 맞히거나 해설을 연 뒤에만 보여요.
  • 학습자 해설: 같은 코드라도 설명 방식은 사람마다 달라요. 문제를 맞힌 사람만 쓸 수 있고(문제마다 한 개, 나중에 수정 가능), 풀이 중에는 보이지 않아요. 다른 사람의 해설이 도움이 됐다면 👍 도움돼요를 눌러 주세요. 도움돼요가 많은 해설이 위로 올라가요.
  • 부적절한 글은 관리자가 숨길 수 있어요.

↑ 맨 위로

⑤ 점수·랭킹

문제마다 기본점이 있어요: 난이도 ★ 10점 · ★★ 20점 · ★★★ 30점.

상황받는 점수
첫 제출에 정답기본점 100%
두 번째 제출 이후 정답80%
해설을 먼저 보고 정답 (몇 번째 제출이든)50%
이미 맞힌 문제 다시 풀기0점 (연습)
  • 점수는 문제마다 처음 맞힐 때 한 번만 받아요. 맞힌 뒤 해설을 보는 건 점수에 영향이 없어요.
  • 등급 (누적 점수, 18단계): 브론즈 · 실버 · 골드 · 플래티넘 · 다이아 · 마스터가 각각 1 → 2 → 3단계예요(숫자가 클수록 높아요). 브론즈 1은 0점, 실버 1은 120점, 골드 1은 360점, 플래티넘 1은 950점, 다이아 1은 2,000점, 마스터 1은 3,600점부터예요. 한 번 오른 등급은 내려가지 않아요. 단계별 점수는 랭킹 화면의 등급 기준표에 있어요.
  • 엠블럼: 프로필 사진 대신 등급마다 기계식 키보드 키캡 엠블럼이 닉네임 옆에 보여요(브론즈 ; · 실버 = · 골드 ( ) · 플래티넘 { } · 다이아 </> · 마스터 ★). 단계가 오를수록 테두리와 빛이 강해져요. 내 정보와 랭킹 화면에서 다음 등급까지 남은 점수를 막대로 볼 수 있어요.
  • 성취 알림: 정답 제출·모의고사 완료·후기/학습자 해설 작성 뒤나 로그인 직후, 새로 받은 배지나 승급(예: “골드 2 승급!”)이 있으면 축하 화면이 떠요. 화면을 누르거나 Esc로 닫고, 지난 알림은 🔔 알림에도 남아요.
  • 랭킹: 이번 주(월요일 0시부터, 한국 시간) / 전체. 승인된 회원만 집계해요. 랭킹 보기 →

↑ 맨 위로

⑥ 학습 도구

코스(6-5)를 뺀 나머지는 로그인하면 쓸 수 있고, 기록은 내 정보(화면 위 오른쪽 닉네임 → 내 정보, 휴대폰은 더보기 → 내 정보)에 모여요.

6-1. 북마크

  • 문제 제목 옆 ☆ 북마크를 누르면 ★ 북마크로 바뀌며 담겨요. 한 번 더 누르면 빠져요.
  • 담은 문제는 내 정보 > 북마크에서 모아 보고, 문제 목록에서는 ★ 표시와 풀이 상태 > 북마크 문제 필터로 찾을 수 있어요.

↑ 맨 위로

6-2. 오답노트

  • 틀린 문제 = 한 번이라도 틀린 제출이 있는 문제예요. 나중에 맞혀도 목록에 남고 다시 맞힘으로 표시돼요(못 맞혔으면 미해결). 아직 못 푼 문제만을 켜면 아직 못 맞힌 문제만 보여요.
  • 메모: 문제 화면 아래 📝 내 메모(오답노트)에 틀린 이유, 헷갈린 부분을 적어 두세요(최대 2,000자). 나만 볼 수 있어요. 틀린 직후에는 메모 칸이 강조돼요.
  • 내 정보 > 오답노트에서 틀린 문제와 메모한 문제를 모아 보고, 메모를 그 자리에서 고칠 수 있어요.

↑ 맨 위로

6-3. 모의고사

  • 메뉴 모의고사 → 문항 수(5 · 10 · 20문항)와 언어를 고르고 모의고사 시작. 문제는 무작위로 골라지고, 제한 시간은 문항당 3분(5문항 15분 · 10문항 30분 · 20문항 60분)이에요.
  • 위쪽 번호로 문항을 오가며 풀고 제출하기. 시간이 다 되면 자동으로 제출돼요. 새로고침하거나 나갔다 와도 같은 기기에서 이어서 풀 수 있어요.
  • 결과에는 맞음/틀림과 정답률·걸린 시간만 나와요. 정답과 해설은 문제 다시 풀기 →로 각 문제 화면에서 풀어 본 뒤 확인해요.
  • 모의고사 점수는 점수·랭킹에 반영되지 않아요. 마음 편히 실전 연습하세요.
  • 지난 결과는 내 정보 > 모의고사 기록에서 보고, 결과 화면으로 보기 →로 결과 화면(/mock/?result=번호)을 다시 열 수 있어요.

모의고사 보러 가기 →

↑ 맨 위로

6-4. 내 정보와 배지

내 정보에는 여섯 개의 탭이 있어요.

탭무엇이 있나
요약🔥 연속 학습일·최장 연속·활동한 날·푼 문제, 이번 주 목표·약한 개념(6-7), 최근 12주 활동 달력(채점을 받거나 모의고사를 본 날이 칠해져요, 한국 시간), 언어별 푼 문제, 배지, 풀이 기록
오답노트틀린 문제와 메모 (6-2)
북마크북마크한 문제 (6-1)
내 신고내가 보낸 문제 신고와 처리 결과 (⑧)
모의고사 기록지난 모의고사 결과 (6-3)
계정 설정닉네임 · 비밀번호 변경, 회원 탈퇴 (⑨)

배지 15종: 첫 정답 · 10문제 · 30문제 · 100문제 · 3일 연속 · 7일 연속 · 30일 연속 · C 입문 · Python 입문 · Java 입문(각 언어 5문제) · 혼자 힘으로(해설 안 보고 10문제) · 모의고사 만점 · 후기 작성 · 해설가(학습자 해설 1개) · 도움왕(받은 공감·도움돼요 10개). 아직 받지 못한 배지도 목록에 보여서 목표로 삼을 수 있어요.

↑ 맨 위로

6-5. 코스

무엇부터 풀지 고민될 때는 코스를 따라가세요. 언어를 고르면 단계별 순서대로 문제를 이어서 풀 수 있어요.

  • 첫 화면의 코스 카드를 옆으로 넘겨 고르거나(넓은 화면은 ◀ ▶ 버튼), 메뉴 코스(휴대폰은 더보기 → 코스)로 들어가요. 위쪽 칩(전체 · 기출 · 예상 · 학습)으로 종류를 골라 볼 수 있고, 언어는 코스 화면에서 골라요.
  • 로그인하면 카드 순서가 나에게 맞춰져요: 🔥 이어서 하던 코스(가장 최근에 푼 코스)가 맨 앞, 다 끝낸 코스는 맨 뒤. 이어서 풀기는 그 코스에서 마지막으로 풀던 언어의 안 푼 첫 문제로 바로 데려가요.
  • ① 변수와 자료형부터 단계마다 문제가 순서대로 놓여 있어요. 처음부터 풀기를 누르면 첫 문제가 열리고, 문제 화면 위에 지금 위치(예: “입문 코스 · Python ⑥ 리스트 (3/15)”)가 보여요.
  • 정답을 맞히거나 해설을 열면 다음 문제: 제목 → 버튼이 나와요. 마지막 문제에서는 진도를 확인해 모두 풀었으면 코스 완료, 아직 안 푼 문제가 있으면 남은 개수와 안 푼 첫 문제 링크가 떠요.
  • 로그인하면 푼 문제에 ✅가 붙고 진도 막대(푼 수/전체)가 채워져요. 이어서 풀기는 아직 안 푼 첫 문제로 데려가요. 코스 화면에는 문제 제목과 단계만 있고 정답·해설은 없어요.

코스 보러 가기 →

↑ 맨 위로

6-6. 오늘의 문제·시험 D-day

  • 🎯 오늘의 문제: 첫 화면에 날마다(한국 시간 기준) 한 문제를 골라 보여 줘요. 로그인하면 아직 안 푼 문제 중에서 고르고, 입문 코스 문제가 더 자주 나와요. 하루 동안은 같은 문제가 유지돼요.
  • 📅 시험 D-day: 관리자가 등록한 실기 시험일이 있으면 첫 화면에 “실기 시험까지 D-n”이 보이고, 시험 당일에는 “D-DAY” 응원 문구로 바뀌어요.
  • 코스 단계 완료: 코스에서 연 문제로 그 단계의 마지막 남은 문제를 맞히면 “④ 반복문 완료!” 같은 축하 화면이 떠요.

↑ 맨 위로

6-7. 주간 목표·약한 개념

로그인하면 첫 화면과 내 정보 > 요약에서 내 풀이 기록으로 계산한 두 가지 도구를 볼 수 있어요.

  • 🗓️ 이번 주 목표: 한국 시간 월요일 00:00부터 일요일까지 ① 새로 맞힌 문제(목표 3·5·10·20개 중 선택, 기본 5개) ② 틀렸던 문제 다시 맞히기 2개 ③ 공부한 날 3일(채점을 받거나 모의고사를 본 날). 그 주에 목표를 처음 채우면 “이번 주 목표 달성!” 축하 화면이 한 주에 한 번 떠요. 나머지 목표는 카드에 나머지 목표는 카드에 “달성”으로 표시돼요(기기마다 따로 기록)ldquo;달성나머지 목표는 카드에 “달성”으로 표시돼요(기기마다 따로 기록)rdquo;으로 표시돼요(기기마다 따로 기록). 목표 수는 이 기기에만 저장돼서 휴대폰과 컴퓨터에서 따로 정해요.
  • 🧩 약한 개념: 문제 태그(개념)마다 시도한 문제·정답률·틀린 횟수·해설을 먼저 본 문제·한 번에 맞힌 비율을 모아, 틀린 횟수와 해설 열람이 많고 한 번에 맞힌 비율이 낮은 개념을 최대 3개 골라요(2문제 이상 시도한 개념만). 개념마다 아직 안 푼 문제를 같은 언어·쉬운 문제부터 추천하고, 틀린 채 남은 문제는 다시 풀기로 먼저 보여 줘요.
  • 맞힌 문제가 5개보다 적으면 “문제를 더 풀면 약한 개념을 찾아 드려요” 안내와 입문 코스 링크가 보여요. 정답이나 해설 내용은 쓰지 않고 내 풀이 기록만 써요.

↑ 맨 위로

⑦ 커뮤니티·알림

메뉴설명
공지·이벤트운영 소식과 이벤트. 공지 / 이벤트 탭으로 나눠 보고, 📌는 위에 고정된 글이에요. 중요한 글은 첫 화면 위에 배너로도 떠요(× 로 닫기). 휴대폰에선 더보기 안에 있고, 새 글이 있으면 빨간 점이 붙어요.
시험 후기정보처리기사 시험 경험을 나누는 곳. 연도 · 회차(1~3회) · 필기/실기 · 전공/비전공 · 합격/불합격을 고르고 제목·내용을 써요. 사진은 최대 5장(촬영 위치 등 사진 정보는 지워져요). 승인된 회원만 쓸 수 있고, 합격 후기는 필기·실기별로 1개씩 쓸 수 있어요.
공감·댓글후기에 ♡ 공감을 누르고, 댓글과 답글(최대 500자)을 달 수 있어요. 목록은 최신순 · 댓글 많은 순 · 공감 많은 순으로 정렬돼요. 부적절한 글·댓글은 신고할 수 있어요.

🔔 알림

화면 위 🔔를 누르면 알림이 보여요. 안 읽은 알림 수가 숫자로 표시되고, 모두 읽음으로 정리해요.

  • 🎉 가입이 승인됐어요
  • 💬 내 후기에 댓글이 달렸어요 / ↩️ 내 댓글에 답글이 달렸어요
  • ✅ 문제 신고가 처리됐어요 / 📭 문제 신고가 반려됐어요 (⑧)

시험 후기 보러 가기 →

↑ 맨 위로

⑧ 문제 신고

정답·해설·코드가 이상하거나 오타를 발견하면 알려 주세요. 승인된 회원이면 신고할 수 있어요.

  • 문제 화면: 제목 옆 ⚠️ 문제 신고 → 사유(정답이 틀렸어요 · 해설(설명)이 틀렸어요 · 코드·실행 결과가 이상해요 · 문제 설명이 모호해요 · 오타·표기 · 기타)를 고르고, 어디가 이상한지 10자 이상 적어 신고하기.
  • 해설 화면: 해설을 보다가 ⚠️ 이 해설이 이상해요를 누르면, 지금 보고 있던 단계와 줄 번호가 자동으로 첨부돼요(예: “해설 12단계 · 4번 줄”). 이상한 단계에서 멈춘 채 누르면 돼요.
  • 처리 결과는 🔔 알림과 내 정보 > 내 신고에서 확인해요(접수 → 확인 중 → 처리 완료/반려, 관리자 답변). 아직 접수 상태일 때만 고치거나 취소할 수 있고, 한 문제에 진행 중인 신고는 하나만 둘 수 있어요.

↑ 맨 위로

⑨ 계정 관리

하고 싶은 것방법
닉네임 바꾸기내 정보 위쪽 ✏️ 닉네임 바꾸기 또는 내 정보 > 계정 설정. 2~24자, 다른 사람과 겹치면 안 돼요.
비밀번호 바꾸기내 정보 > 계정 설정 > 비밀번호 변경에서 현재 비밀번호를 확인한 뒤 새 비밀번호로 바꿔요. Google·카카오로 가입해 비밀번호가 없다면 비밀번호 찾기로 비밀번호를 만들면 이메일로도 로그인할 수 있어요(이메일 주소가 없는 카카오 계정은 제외).
비밀번호 찾기로그인 화면 비밀번호를 잊으셨나요? → 가입한 이메일 입력 → 재설정 메일 받기. 메일의 링크는 요청한 그 브라우저에서 열고, 가장 최근 메일의 링크를 쓰세요. 메일이 가는 건 이때뿐이에요.
회원 탈퇴내 정보 > 계정 설정 > 회원 탈퇴 → 탈퇴하기. 계정과 점수·풀이 기록·학습자 해설, 게시판 댓글과 공감이 바로 삭제되고 되돌릴 수 없어요. 시험 후기는 지워지지 않고 ‘탈퇴한 회원’으로 남아요 — 지우고 싶다면 탈퇴 전에 직접 삭제하세요.
다크 모드PC는 화면 위 오른쪽 테마 버튼, 휴대폰은 더보기 > 화면 테마에서 시스템 · 라이트 · 다크 중 골라요. ‘시스템’은 기기 설정을 따라가요.

↑ 맨 위로

⑩ 자주 묻는 질문

정답 같은데 오답이에요

대소문자, 줄바꿈 위치, 출력에 없는 공백(특히 줄 앞 공백)을 확인하세요. 줄 끝 공백과 마지막 빈 줄은 괜찮아요. 빈칸 채우기는 공백을 무시하지만 대소문자는 구분해요.

제출 버튼이 안 눌려요 / 해설이 안 열려요

로그인했는지, 그리고 승인 상태(헤더 아래 안내 줄)를 확인하세요. 승인 전에는 제출·해설을 쓸 수 없어요.

메일이 안 와요

가입할 때는 원래 메일을 보내지 않아요 — 메일 인증 없이 관리자 승인으로 진행되고, 승인되면 🔔 알림으로 알려 드려요. 비밀번호 찾기 메일이 안 온다면 몇 분 기다린 뒤 스팸함을 확인하고, 그래도 없으면 다시 요청해 주세요.

승인은 언제 되나요?

카카오톡 오픈채팅방에 해설고래 승인요청 : [닉네임]을 보내 주시면 운영자가 확인하는 대로 승인해 드려요. 그동안 문제와 코드는 볼 수 있어요.

해설 단계가 너무 많아요

슬라이더로 건너뛰고, 💡 줄 해설이 있는 단계와 함수 호출/반환 단계 위주로 보세요. 반복문은 🔁 칩의 회차를 보며 필요한 바퀴만 골라 보면 돼요.

모의고사를 보면 점수가 오르나요?

아니요. 모의고사는 점수·랭킹에 반영되지 않아요. 문제 화면에서 처음 맞힌 문제만 점수를 받아요.

해설이나 정답이 틀린 것 같아요

문제 제목 옆 ⚠️ 문제 신고, 또는 해설 화면의 ⚠️ 이 해설이 이상해요로 알려 주세요. 처리 결과는 알림과 내 정보 > 내 신고에서 볼 수 있어요.

모바일에서도 되나요?

돼요. 코드 아래에 변수·출력이 이어서 나와요. 메뉴는 화면 아래 탭 바와 더보기에 있어요. 가로로 돌리면 더 넓게 볼 수 있어요.

↑ 맨 위로