목차

혼공컴운 1주차 범위는
Chapter 01: 컴퓨터 구조 시작하기
Chapter 02: 데이터
Chapter 03: 명령어
로 이루어져 있습니다.
기본 과제는 p.65 3번 문제고 선택 과제는 스택과 큐의 내용 정리하기 입니다.
스택과 큐는 기본적인 자료구조로 중요한 내용이니 선택 과제도 해 보았습니다.
아직까지는 크게 어려운 내용은 없고 간단하게 정리하면서 봤습니다.
학습 내용 정리
Chapter 01: 컴퓨터 구조 시작하기
컴퓨터가 이해하는 구조
- 데이터
- 명령어
컴퓨터의 4가지 핵심 부품
- CPU
- 메모리(주기억장치)
- 보조기억장치
- 입출력장치
주기억장치는 다음의 2가지로 나뉨
- RAM
- ROM
메모리
메모리(주기억장치)는 현재 실행되는 명령어와 데이터를 저장한다.
메모리에서 저장된 값의 위치는 주소로 알 수 있다
메모리 중 RAM은 휘발성 메모리로 전원이 꺼지면 데이터가 전부 지워진다
CPU
CPU는 명령어를 읽고 해석, 실행한다.
CPU의 3대 구성 요소
- ALU(산술논리연산장치)
- 레지스터
- 제어 장치
ALU 는 컴퓨터 내의 연산을 담당 한다.
레지스터는 프로그램 실행에 필요한 값을 임시 저장한다
제어 장치는 제어 신호를 내보내고 명령어를 해석 한다
보조기억장치
물리적 디스크가 연결되어 있으며 컴퓨터가 꺼져도 데이터가 유지 된다
입출력장치
키보드, 마우스 등 외부에 연결되어 있는 주변장치로 컴퓨터 내부의 정보를 교환하는 장치
시스템 버스를 통해 컴퓨터 내부와 데이터를 주고 받는다
시스템 버스
시스템 버스 내부 구성
- 주소 버스: 주소를 주고 받음
- 제어 버스: 제어 신호를 주고 받음
- 데이터 버스: 명령어와 데이터를 주고 받음
Chapter 02: 데이터
정보 단위
bit: 0,1 을 표현 할 수 있는 가장 작은 정보 단위
byte: 8bit
그 밖에 KB(1000byte), MB, GB 등이 있다.
이진법
0, 1로 수를 표현
2의 보수법: 이진법을 음수로 표현하기 위한 방법
십육진법
0~9, A~F로 수를 표현
문자 집합
컴퓨터가 인식하고 표현할 수 있는 문자 모음
대표적 문자 집합 종류
- ASCII
- 유니코드
인코딩
문자를 컴퓨터가 이해 할 수 있도록 0과1로 변환시킴
대표적인 유니코드의 인코딩 종류
- UTF-8
- UTF-16
- UTF- 32
Chapter 03: 명령어
컴퓨터 언어의 종류
고급 언어: 사람이 이해하기 쉬운 언어
저급 언어: 기계 친화적인 언어
고급 언어는 C, C++, Java, Python 등
저급 언어는 기계어, 어셈블리어 등
( C, C++ 는 메모리 직접 접근 등 저급 언어의 일부 특성을 가지고 있다)
고급 언어의 변환 방식에 따른 분류
고급 언어는 저급 언어로 변환 되어 실행 됨
변환 방식
- 컴파일 방식
- 인터프리트 방식
컴파일 방식: 소스 코드 전체를 저급 언어 변환 시킴 (C언어 등)
인터프리트 방식: 인터프리터에 의해 소스코드 한 줄씩 저급 언어로 변환 후 실행 시킴(Python 등)
목적 코드: 컴파일러로 인해 저급 언어로 변환된 코드
컴파일 언어 vs 인터프리트 언어
구분 | 컴파일 언어 | 인터프리트 언어 |
처리속도 | 상대적으로 빠름(일반적으로) | 상대적으로 느림 |
오류 발생 | 소스코드 전체 실행 불가 | 오류 발생 전 까지 코드 실행 |
언어 | C++, C 등 | Python |
명령어의 구조
연산코드 | 오퍼랜드 |
- 연산 코드(연산자)
- 오퍼랜드(피연산자)
연산 코드: 명령어가 수행 할 연산
오퍼랜드: 연산에 사용될 데이터 또는 연산에 사용될 데이터 주소
유효 주소: 연산 대상 데이터가 저장 된 위치
주소 지정 방식
- 즉시 주소 지정 방식: 오퍼랜드에 데이터를 직접 명시
- 직접 주소 지정 방식: 오퍼랜드에 유효 주소 직접 명시
- 간접 주소 지정 방식: 유효 주소의 주소를 오퍼랜드에 명시
- 레지스터 주소 지정 방식: 연산 대상 데이터를 저장한 레지스터를 오퍼랜드에 명시
- 레지스터 간접 주소 지정 방식: 연산에 사용할 데이터를 메모리에 저장하고 유효 주소를 저장한 레지스터를 오퍼랜드에 명시
과제
기본 과제: p.51 3번문제
p.65 3번문제
3. 다음 설명의 빈칸에 들어갈 내용을 쓰시오.
프로그램이 실행되려면 반드시 ( _____ ) 에 저장되어 있어야 한다.
프로그램이 실행되려면 메모리에 저장 되어야 합니다. 정답: 메모리
3. 1101(2) 를 2의 보수법으로 표현하라
과정도 문제에 나와 있어서 그대로 따라하면 됩니다.
제 풀이 입니다.

2의 보수법으로 음수 표현하는 방법은
1) 모든 0과 1을 반대로 적는다
2) 마지막에 + 1 해준다
1101(2)의 음수값은 0011(2) 인 것을 간단하게 구할 수 있습니다.
심화 과제: 스택과 큐 내용 정리하기
스택 과 큐는 대표적인 선형 자료구조입니다.
스택은 한쪽 끝이 막혀 있고, 큐는 양쪽이 뚫려 있는 형태로 표현합니다.

스택에 데이터를 새로 저장하는 명령어는 push, 데이터를 꺼내는 명령어는 pop 입니다.
구조상 스택에서 꺼내는 데이터는 마지막으로 저장된 데이터부터 꺼내지게 됩니다.
이러한 관리 방식을 LIFO(후입선출) 이라고 합니다.

반대로 큐는 구조상 한쪽 끝에서 데이터를 저장하고 반대편 끝에서 먼저 저장된 데이터부터 꺼내지게 됩니다.
큐 에서 데이터를 추가하는 연산을 Enqeue, 데이터를 삭제하는 연산을 Dequeue 라고 합니다
이러한 관리 방식을 FIFO(선입선출) 이라고 합니다
실습 - 스택 구현하기
여기서부턴 개인적인 실습입니다.
아래 문제를 풀고 스택 구조를 구현하고 해당 프로그램을 작성 해 보았습니다.
백준 - 스택2(28278)
https://www.acmicpc.net/problem/28278

스택 구조를 구현 하고 명령어에 따라 처리 하는 문제입니다. (실버 4단계)
저는 c++ STL에 있는 stack 구조체를 활용하여 구현했습니다.
#include <iostream>
#include <stack>
using namespace std;
using std::cin;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
stack<int> Stack01;
// 명령의수
for (int i = 0; i < n; i++)
{
int input;
cin >> input;
// 스택에 push
if (input == 1)
{
int n;
cin >> n;
Stack01.push(n);
}
// 스택에 pop
else if (input == 2)
{
if (Stack01.empty())
{
cout << -1 << "\n";
}
else
{
cout << Stack01.top() << "\n";
Stack01.pop();
}
}
// 스택에 들어가있는 정수 개수
else if (input == 3)
{
cout << Stack01.size() << "\n";
}
// 스택이 비어 있으면 1, 아니면 0
else if (input == 4)
{
if (Stack01.empty())
{
cout << 1 << "\n";
}
else
{
cout << 0 << "\n";
}
}
// 스택 맨 위에 정수를 출력, 없으면 -1 출력
else if (input == 5)
{
if (Stack01.empty())
{
cout << -1 << "\n";
}
else
{
cout << Stack01.top() << "\n";
}
}
// 유효하지 않은 명령
else
{
cout << "유효하지 않은 명령" << "\n";
}
}
}
실행 결과

처음에 13을 push 한 후 6을 push 했습니다.
pop 수행 시 6, 13 순으로 출력 되는걸 확인 가능합니다.
참고
https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%83%9D
https://ko.wikipedia.org/wiki/%ED%81%90_(%EC%9E%90%EB%A3%8C_%EA%B5%AC%EC%A1%B0)
'혼공- 컴퓨터구조, 운영체제' 카테고리의 다른 글
[혼공컴운]5주차_프로세스 동기화/ 교착 상태 (0) | 2025.02.14 |
---|---|
[혼공컴운] 4주차_운영체제 시작하기/ 프로세스와 스레드/ CPU 스케줄링 (0) | 2025.02.05 |
[혼공컴운] 3주차_메모라와 캐시메모리/ 보조기억장치/ 입출력장치 (0) | 2025.01.21 |
[혼공컴운] 2주차_CPU의 작동원리/ CPU 성능 향상 기법 (1) | 2025.01.15 |
혼공학습단 13기 시작 - 컴퓨터구조, 운영체제 (0) | 2024.12.31 |