정수와 실수
C에서 x와 y를 %.1f 형식으로 출력하면?
double x = 7 / 2;
double y = 7 / 2.0;
printf("%.1f %.1f", x, y);정답과 풀이 확인
정답 3.0 3.5
x는 정수 7/2의 결과 3을 실수로 저장한다. y는 피연산자 하나가 실수이므로 3.5다.
이 브라우저에서 다음 학습에도 적용됩니다.
정보처리 실무 · 학습 노트
웹 개발 지식을 시험 풀이로 바꾸기
실기는 코드를 직접 실행하기 전에 결과를 예측하는 훈련이 중요하다. 익숙한 JavaScript 규칙을 다른 언어에 그대로 적용하지 말고 자료형, 메모리 공유, 호출 순서, 출력 형식을 분리해서 읽자.
기호와 용어가 낯설면 기초·상세 보강을 먼저 읽고, 기존 핵심 정리로 연결하세요. 예제의 값을 손으로 계산한 뒤 확인 질문을 답하고 마지막에 문제를 풉니다.
핵심 규칙을 설명하고, 연습문제의 답과 이유를 해설 없이 적을 수 있으면 체크하세요. 이해 체크와 정답 기록은 별도로 저장됩니다.
① 언어와 출력문을 확인한다. ② 변수의 자료형과 초기값을 적는다. ③ 배열·객체는 별도의 상자로 그리고 참조 화살표를 연결한다. ④ 반복문은 회차별 표를 만든다. ⑤ 함수 호출마다 독립된 지역변수 칸을 만든다. ⑥ 마지막에 출력만 모은다.
“매번 같은 순서로 푼다”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
추적표의 열: 실행 줄 / i / 주요 변수 / 배열 / 출력 누적 머릿속으로 끝까지 계산하면 중간 변경을 놓치기 쉽다. 출력에 공백과 줄바꿈이 있는지 따로 표시한다.
추적표의 열: 실행 줄 / i / 주요 변수 / 배열 / 출력 누적
헷갈리는 지점 머릿속으로 끝까지 계산하면 중간 변경을 놓치기 쉽다. 출력에 공백과 줄바꿈이 있는지 따로 표시한다.
C와 Java는 정수끼리 /를 하면 0 방향으로 버린 정수다. Python 3의 /는 실수 나눗셈이고 //는 아래쪽 정수로 내린다. JavaScript의 일반 Number 나눗셈과 다르다.
“정수 나눗셈과 나머지”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
C·Java: -7 / 3 = -2, -7 % 3 = -1. Python: -7 // 3 = -3, -7 % 3 = 2. C에서 double x = 7 / 2;의 x는 3.0이다. 저장할 때 변환해도 이미 잘린 소수 부분은 돌아오지 않는다.
C·Java: -7 / 3 = -2, -7 % 3 = -1. Python: -7 // 3 = -3, -7 % 3 = 2.
헷갈리는 지점 C에서 double x = 7 / 2;의 x는 3.0이다. 저장할 때 변환해도 이미 잘린 소수 부분은 돌아오지 않는다.
C·Java의 큰 틀은 괄호 → 단항 → 곱셈·나눗셈 → 덧셈 → 시프트 → 비교 → 동등 비교 → 비트 AND/XOR/OR → 논리 AND/OR → 조건 → 대입 순이다. Python은 비트 연산이 비교보다 먼저인 등 순서가 다르므로 이 표를 그대로 적용하지 않는다. 실제 코드는 괄호를 덧그려 해석한다.
“연산자·단락 평가”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
C·Java의 &&와 ||는 결과가 정해지면 오른쪽을 실행하지 않는다. &와 |는 비트 연산과 구별한다. Python에는 ++가 없다. ^는 세 언어 모두 거듭제곱이 아니라 XOR이다. Python 거듭제곱은 **.
C·Java의 &&와 ||는 결과가 정해지면 오른쪽을 실행하지 않는다. &와 |는 비트 연산과 구별한다.
헷갈리는 지점 Python에는 ++가 없다. ^는 세 언어 모두 거듭제곱이 아니라 XOR이다. Python 거듭제곱은 **.
for는 초기화 → 조건 → 본문 → 증감 → 조건 순서다. continue는 현재 본문의 나머지를 건너뛴다. 재귀는 종료 조건과 다음 인자의 크기를 먼저 확인한다.
“반복문과 재귀”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
재귀 함수는 내려갈 때의 호출과 돌아올 때의 계산을 분리한다. C·Java의 for에서 continue 뒤에도 증감식은 실행된다. while에서는 직접 작성한 증감문을 건너뛸 수 있다.
재귀 함수는 내려갈 때의 호출과 돌아올 때의 계산을 분리한다.
헷갈리는 지점 C·Java의 for에서 continue 뒤에도 증감식은 실행된다. while에서는 직접 작성한 증감문을 건너뛸 수 있다.
스택은 LIFO, 큐는 FIFO다. 정렬된 배열의 이진 탐색은 탐색 범위를 절반씩 줄여 O(log n), 전체 순회는 O(n), 독립적인 n회 반복 두 겹은 O(n²)이다.
“복잡도와 자료구조”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
DFS는 재귀·스택, BFS는 큐. BST 중위 순회는 키를 정렬된 순서로 방문한다. 연속한 두 반복문은 O(n)+O(n)=O(n)이다. 중첩 여부와 실제 반복 범위를 확인한다.
DFS는 재귀·스택, BFS는 큐. BST 중위 순회는 키를 정렬된 순서로 방문한다.
헷갈리는 지점 연속한 두 반복문은 O(n)+O(n)=O(n)이다. 중첩 여부와 실제 반복 범위를 확인한다.
전위는 루트-왼쪽-오른쪽, 중위는 왼쪽-루트-오른쪽, 후위는 왼쪽-오른쪽-루트다. print가 재귀 호출 앞·사이·뒤 어디에 있는지 표시한다.
“트리 순회”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
루트 A, 왼쪽 B(자식 D,E), 오른쪽 C라면 전위 ABDEC / 중위 DBEAC / 후위 DEBCA. 함수 이름이 traverse라고 해서 순회 종류를 알 수 없다. 실제 출력문의 위치로 판정한다.
루트 A, 왼쪽 B(자식 D,E), 오른쪽 C라면 전위 ABDEC / 중위 DBEAC / 후위 DEBCA.
헷갈리는 지점 함수 이름이 traverse라고 해서 순회 종류를 알 수 없다. 실제 출력문의 위치로 판정한다.
버블 정렬은 인접한 두 원소를 비교해 앞이 크면 교환하는 것을 반복해 매 회전마다 가장 큰 값을 뒤로 확정한다. 선택 정렬은 남은 범위 전체에서 최솟값을 찾아 맨 앞자리와 교환한다. 삽입 정렬은 앞쪽 정렬된 부분에 현재 값을 알맞은 위치로 끼워 넣는다.
“기본 정렬 알고리즘 손 추적”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
버블 정렬 1회전 후에는 가장 큰 값이 배열 맨 뒤에 위치한다. 선택 정렬은 한 회전에 교환이 최대 1번뿐이다. "몇 회전째 상태"를 물으면 전체 정렬 결과가 아니라 그 회전이 끝난 시점의 배열을 정확히 적어야 한다.
버블 정렬 1회전 후에는 가장 큰 값이 배열 맨 뒤에 위치한다. 선택 정렬은 한 회전에 교환이 최대 1번뿐이다.
헷갈리는 지점 "몇 회전째 상태"를 물으면 전체 정렬 결과가 아니라 그 회전이 끝난 시점의 배열을 정확히 적어야 한다.
변수는 값을 읽고 변경할 때 쓰는 이름이다. 리터럴은 코드에 직접 적은 값(3, "A")이고 식은 계산해서 값을 만드는 조각(x+2)이다. 대입문은 그 결과를 변수에 저장한다. x=x+1은 방정식이 아니라 이전 x에 1을 더해 새 값으로 바꾸는 명령이다.
순차 실행은 위에서 아래로, 분기는 조건에 따라, 반복은 같은 구간을 여러 번, 함수 호출은 호출된 본문으로 이동했다 돌아오는 흐름이다. 결과를 묻는 문제에서는 각 실행이 끝날 때 변수값을 적는다.
x = 2
x = x + 3
print(x)
x = x * 2
print(x)대입 y=x 다음에 x를 바꾸면 y도 항상 바뀌는가?
아니다. 정수값 복사/이름 재연결과 공유 객체 변경을 언어·자료형에 맞춰 구분한다.
초기값 → 실행 순서 → 최종 출력. =와 ==를 분리한다.
헷갈리는 지점 출력되지 않은 계산값을 답에 적지 않는다. 최종 변수값과 전체 출력은 다르다.
이진수는 각 자리의 값이 오른쪽부터 1,2,4,8,16이다. 1010₂는 8+2=10이다. 십진수를 이진수로 바꾸려면 2로 계속 나누고 나머지를 아래에서 위로 읽는다. 16진수 한 자리는 이진수 네 자리에 대응하며 A~F는 10~15다.
10진수 26은 16진수 1A이고 이진수 0001 1010이다. 부호 없는 비트 연산은 먼저 같은 자리 수로 맞춘 뒤 각 자리에서 계산한다. 음수를 다루면 비트 폭과 2의 보수 조건을 먼저 확인한다.
| 자리 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|
| 10 | 1 | 0 | 1 | 0 |
| 6 | 0 | 1 | 1 | 0 |
| XOR | 1 | 1 | 0 | 0 |
16진수 2F는 십진수로?
2×16+15=47.
AND: 둘 다 1 / OR: 하나라도 1 / XOR: 서로 다름 / NOT: 반전.
헷갈리는 지점 십진수 숫자 문자열을 그대로 비트처럼 계산하지 않는다. ~의 결과는 정수 폭·언어 규칙에 따라 읽는다.
배열은 인덱스로 원소를 찾는 연속 저장 구조다. 연결 리스트는 노드에 값과 다음 노드의 연결을 저장한다. 노드를 찾는 데 순회가 필요하지만 이미 위치를 알면 연결을 바꿔 삽입·삭제할 수 있다.
스택은 마지막에 넣은 것을 먼저 꺼내는 LIFO 구조로 재귀 호출·괄호 검사에 쓴다. 큐는 먼저 넣은 것을 먼저 꺼내는 FIFO 구조로 대기열·BFS에 쓴다. 덱은 양쪽에서 넣고 꺼낼 수 있다.
함수 호출의 복귀 순서를 관리하는 자료구조는?
스택. 마지막에 호출한 함수가 먼저 복귀한다.
push/pop은 스택, enqueue/dequeue는 큐. 스택 top과 큐 front를 기록한다.
헷갈리는 지점 연결 리스트가 모든 검색·삽입에서 항상 배열보다 빠른 것은 아니다. 위치를 찾는 비용을 포함한다.
버블 정렬은 인접한 두 값을 비교·교환한다. 선택 정렬은 남은 범위의 최솟값을 골라 앞에 놓고, 삽입 정렬은 현재 값을 이미 정렬된 앞부분의 알맞은 위치에 넣는다. 병합 정렬은 나눠 정렬한 뒤 병합하고 퀵 정렬은 피벗을 기준으로 분할한다.
순차 탐색은 앞에서부터 비교한다. 이진 탐색은 정렬된 범위에서 중간값과 비교해 절반을 버린다. O는 입력 크기가 커질 때 연산량 증가를 표현하며 실제 초 단위 시간이 아니다.
한 루프가 n회, 뒤 루프가 n회라면 O(n²)인가?
O(n). 반복 두 개가 중첩되어 각각 n회 수행해야 O(n²)이 된다.
버블·선택·삽입 평균 O(n²), 병합 O(n log n), 퀵 평균 O(n log n)·최악 O(n²).
헷갈리는 지점 이진 탐색의 전제는 정렬이다. 삽입 정렬은 이미 정렬된 입력에서 O(n)이 될 수 있다.
재귀는 함수가 자신을 호출하는 것이다. 종료 조건이 없거나 인자가 종료 방향으로 변하지 않으면 끝나지 않는다. 함수마다 인자·지역변수는 따로 존재하며 호출 전 계산과 복귀 후 계산의 순서가 다르다.
DFS는 한 갈래를 깊게 탐색하고 되돌아오며 스택·재귀를 이용한다. BFS는 가까운 거리부터 탐색하며 큐를 이용한다. 그래프에 순환이 있으면 방문 표시가 필요하고, 방문 순서는 인접 노드 선택 조건에 영향을 받는다.
def f(n):
if n == 0:
return
print(n, end="")
f(n-1)
print(n, end="")
f(2)간선의 가중치가 모두 같은 그래프에서 가까운 단계부터 탐색하려면?
BFS. 큐를 사용한다.
재귀는 호출 스택을 그리고, BFS는 큐 내용을 회차별로 적는다.
헷갈리는 지점 가중치가 다른 그래프의 최단 경로에 일반 BFS를 그대로 쓰지 않는다.
모두 유형 연습을 위해 직접 만든 문제입니다. C 예제의 printf·strlen은 필요한 표준 헤더가 포함된 상황을 가정합니다. Java는 표시된 클래스·main 위치에서 실행합니다. 단답은 동의어가 있을 수 있어 자동 판정 대신 자기 채점을 사용합니다.
C에서 x와 y를 %.1f 형식으로 출력하면?
double x = 7 / 2;
double y = 7 / 2.0;
printf("%.1f %.1f", x, y);정답 3.0 3.5
x는 정수 7/2의 결과 3을 실수로 저장한다. y는 피연산자 하나가 실수이므로 3.5다.
출력 결과를 쓰시오.
int sum = 0;
for (int i=1; i<=5; i++) {
if (i%2 == 0) continue;
sum += i;
}
printf("%d", sum);정답 9
i=1,3,5만 합산한다. 1+3+5=9.
f(4)의 값은?
int f(int n) {
if (n <= 1) return 1;
return n + f(n-1);
}정답 10
f(4)=4+f(3)=4+3+2+1=10이다. 각 호출의 n은 별개다.
A의 왼쪽 자식 B, 오른쪽 자식 C, B의 왼쪽 자식 D가 있다. 후위 순회는?
정답 DBCA
왼쪽 부분 트리 D,B를 먼저 끝내고 오른쪽 C, 마지막 루트 A를 방문한다.
배열 5,2,4,1을 버블 정렬로 1회전(인접 비교를 배열 끝까지 1바퀴)했을 때 배열은?
정답 2 4 1 5
(5,2) 교환→2,5,4,1. (5,4) 교환→2,4,5,1. (5,1) 교환→2,4,1,5.
배열 4,1,3,2를 선택 정렬로 1회전했을 때 배열은?
정답 1 4 3 2
전체 범위에서 최솟값 1을 찾아 첫 번째 자리 4와 교환한다.
코드 공통 원리 또는 공식 출제경향을 보완하는 단원입니다. 특정 회차의 직접 출제를 주장하지 않습니다.