정보처리기사 실기 : 메타코드M 실기 강의(5-1 프로그래밍 공통)
이 글에 들어가기 전에..
- 메타코드M 님의 유튜브를 참조하여 작성하였습니다. 해당 내용이 문제가 될 경우, 즉시 삭제하도록 하겠습니다.
5-1. 프로그래밍 - 공통 영역 (16:28)
- 코딩 관련 문제의 비중이 점점 커져가는 추세.
- 5 ~ 60%의 비중을 차지하기 때문에 프로그래밍 과목은 중요함
프로그래밍 언어 소개
- 기계어는 0과 1로 이루어진 가장 저수준의 언어
- 기계어는 인간이 이해하고 사용하기 매우 어렵기 때문에, C / Python 등의 고급 프로그래밍 언어로 발전
- 고급 언어일수록 변수 선언 등을 통해 복잡한 하드웨어 세부사항을 신경쓰지 않을 수 있고, 사용이 편리해짐
변수
변수란?
- 어떤 값을 주기억 장치에 기억하기 위해 사용하는 공간
- 변수를 선언하면 주기억 장치(메모리)에서 특정 위치와 공간을 할당받아, 그 위치에 데이터를 저장할 수 있게 됨
- 변수 설정에는 일반적인 규칙이 있음
- 데이터 타입에 따라 할당받는 공간의 크기가 달라짐
변수 설정 규칙
- 변수 설정에는 일반적으로 규칙이 존재함
- 사용 가능 문자
- 알파벳 문자(a-z/A-Z), 밑줄(_), 숫자 등 사용 가능
(O)
age,Age,A_ge,a24_
(X)a-ge,age?,a>\<ge,age!
- 문자 배치 규칙
- 첫 자리에는 숫자를 사용할 수 없음
- 띄어쓰기를 사용할 수 없음, 주로 _를 대신 사용
(O)
age10,average_age
(X)10age,average age,average-age
- 예약어 사용 금지
- 각 프로그래밍 언어 별로 특정 기능을 나타내는 예약어가 있으며, 이를 변수명으로 사용 불가
for,while,if,else,class,int,short,long,do,break,void...
자료형 (C/Java)
- 변수에 저장될 데이터의 종료와 크기를 정의하는 프로그래밍 언어의 속성
- 정수형 (integer)
- 정수를 저장
- 기본은 int(4바이트)
- 할당이 필요한 크기에 따라 short(2바이트), long(8바이트) 등의 자료형도 사용법
- 부동 소수형(floating point)
- 실수를 저장
- 기본은 float(4바이트)이며, 할당 크기에 따라 double(8바이트) 등의 자료형을 사용
- 문자형(character)
- 단일 문자를 저장
- 기본은 char
- C는 1바이트, Java는 2바이트
- 문자열(string)
- 여러 문자를 저장
- C의 경우, char로 배열을 만들어 여러 문자를 저장하며, Java의 경우 string 자료형을 사용
- 논리형(Boolean)
- 참과 거짓을 표현
- Java에만 존재
- C는 int를 활용해 0이 아닌 값과 0으로 구분
자료형 (Python)
- 파이썬은 변수를 선언하고 값을 할당할 때, 자동으로 자료형이 결정되는 동적 타이핑을 지원하는 언어
- 사용자는 변수를 선언할 때, 자료형을 명시적으로 지정할 필요가 없음
# 언어별 자료형 선언 방식
## C, Java
int a = 10;
### C
Char name[] = `Alice`;
### Java
String name = `Alice`;
## Python
a = 10
name = `Alice`배열
배열(Array)이란?
- 동일한 데이터 타입의 값들을 연속된 메모리 공간에 저장하는 데이터 구조
- 여러 개의 데이터를 하나의 변수로 관리할 수 있게 해주는 장점이 있음
- 배열의 각 요소는 인덱스를 사용해 접근할 수 있으며, 인덱스는 0부터 시작함
다차원 배열(Multidimensional Array)
- 같은 데이터 타입의 값들을 행렬 형태로 저장하는 데이터 구조
- 여러 개의 배열을 포함하는 구조로, 행과 열(2차원), 혹은 더 높은 차원(3차원 이상)으로 확장 가능
- 배열의 요소는 인덱스를 여러 개 사용해 접근하며, 각 차원의 인덱스는 0부터 시작
- 2차원 배열을 표(table)와 같은 형태, 3차원 배열은 여러 개의 표가 쌓인 형태를 표현
연산자
연산자란?
- 프로그래밍에서 특정 연산을 수행하는 데 사용되는 기호
- 하나 이상의 피연산자를 대상으로 계산을 수행하고, 그 결과를 반환
산술 연산자
- 수학적 연산을 수행
- 덧셈(
+), 뺄셈(-), 곱셈(*), 나누기(/), 나머지(%)
비교 연산자
- 두 피연산자를 비교하고, 그 결과를 참 또는 거짓으로 반환
==,!=,<>..
논리 연산자
- 주로 조건문에서 사용되며 참(1), 거짓 값(0)을 결합하거나 반전시키는데 사용
- AND(
&&), OR(||), NOT(!)
대입 연산자
- 변수에 값을 할당하는데 사용
=,+=,-=,*=,/=,%=
증감 연산자
- 변수의 값을 1씩 증가시키거나 감소시키는데 사용
++- 변수의 값을 1씩 증가
- ++x는 먼저 x의 값을 1 증가시키고, 그 변경된 값을 사용 (전위연산자)
- x++은 먼저 현재 x의 값을 사용한 후, 그 다음에 x의 값을 1 증가시킴 (후위연산자)
--도 반대로 동일함- 연산자의 위치에 따라 전위/후위로 나뉨.
int x = 5;
# 전위연산자
int y = ++x;
## 1. x가 5 -> 6
## 2. y에 6이 대입
## 3. 최종 결과 : x = 6, y = 6
# 후위연산자
int y = x++;
## 1. y는 현재 x의 값(5)으로 대입
## 2. 그 다음, x가 5 -> 6
## 3. 최종 결과 : x = 6, y = 5
# 추가 예시
int y = x++ + 2;
## 1. 우선 x의 값인 5를 사용
## 2. y는 5 + 2 = 7이 할당
## 3. 그 다음, x++로 x는 6
## 4. 최종 결과 : x = 6, y = 7비트 연산자
- 이진수 표현에서 비트 단위로 연산을 수행
| 기호 | 설명 | 예시 |
|---|---|---|
& | (AND): 두 비트가 모두 1일 때만 1을 반환 | 5 & 3은 1 (5는 0101, 3은 0011, 결과는 0001) |
\ | (OR): 두 비트 중 하나라도 1이면 1을 반환 | 5 \ 3은 7 (결과는 0111) |
^ | (XOR): 두 비트가 서로 다를 때만 1을 반환 | 5 ^ 3은 6 (결과는 0110) |
~ | (NOT): 비트 반전 | ~5는 -6 (비트를 반전시켜 음수가 됨) |
<< | (왼쪽 시프트): 비트를 왼쪽으로 지정된 수만큼 이동 | 5 << 1은 10 (5는 0101, 왼쪽으로 1칸 이동하여 1010) |
>> | (오른쪽 시프트): 비트를 오른쪽으로 지정된 수만큼 이동 | 5 >> 1은 2 (5는 0101, 오른쪽으로 1칸 이동하여 0010) |
이진수 표현
- 10진수를 2로 나누는 과정을 반복하고, 나머지를 기록하여 이진수로 변환할 수 있음
삼항 연산자
- 세 개의 피연산자를 사용하는 유일한 연산자로, 조건에 따라 다른 값을 반환하게 함
- 결과 = (조건) ? A : B
- 조건이 참일 경우 A가 결과가 되고, 거짓일 경우 B가 결과로 반환됨
int a = 10;
int b = 20;
int value = a>b ? a : b;
# a > b 조건이 false이므로, b의 값이 반환되어 value=20이 됨연산자 우선 순위
- 여러 연산자가 포함된 표현식을 계산할 때, 어떤 연산자가 먼저 실행되는지를 결정하는 규칙
0순위 : 괄호
1순위 : 단항 연산자 (피연산자의 개수가 1개)
2순위 : 이항 연산자 (피연산자의 개수가 2개)
3순위 : 삼항 연산자
4순위 : 대입 연산자
제어문
제어문이란?
- 코드의 흐름을 제어하거나 조건에 따라 특정 코드를 실행 또는 반복하도록 하는 구조로
조건문
- 주어진 조건이 참인지, 거짓인지에 따라 실행할 코드를 결정
- 조건문을 통해 프로그램이 상황에 따라 서로 다른 작업을 수행할 수 있음
- if-else 문을 주로 사용하며, 경우에 따라 switch 문도 사용함
if (조건) {
조건이 참일 때 실행될 코드;
} else if (다른 조건) {
다른 조건이 참일 때 실행될 코드;
} else {
위의 조건들이 모두 거짓일 때 실행될 코드;
}if 조건:
조건이 참일 때 실행될 코드
elif 다른 조건:
다른 조건이 참일 때 실행될 코드
else:
위의 조건들이 모두 거짓일 때 실행될 코드조건문 예시
// C
#include <stdio.h>
int main(){
int x = -5;
if (x>0) {
printf("x is positive.\n")
} else if (x<0) {
printf("x is negative.\n")
} else{
printf("x is zero.\n")
}
return 0;
}// Java
public class Main{
public static void main(String[] args) {
int x = -5;
if (x>0){
System.out.println("x is positive.");
} else if (x<0){
System.out.println("x is positive.");
}
else {
System.out.println("x is zero.");
}
}
}# Python
x = -5
if x > 0:
print("x is positive.")
elif x < 0:
print("x is positive.")
else:
print("x is zero.")반복문
- 조건이 만족되는 동안 특정 코드를 반복적으로 실행하는 구조
- for문, while문, do-while문 등
for 문
- 반복 횟수를 명시적으로 제어하는 반복문
- 반복할 횟수가 정해져 있을 때 사용
// C
#include <stdio.h>
int main(){
for (int i=0; i<5; i++) {
printf("%d\n", i); // 0부터 4까지 출력
}
return 0;
}# Python
## case 1
li = [0, 1, 2, 3, 4]
for i in li:
print(i) # 0부터 4까지 출력
## case 2
for i in range(5):
print(i) # 0부터 4까지 출력
for i in range(2, 5):
print(i) # 2부터 4까지 출력while문
- 조건이 참인 동안 계속해서 반복하는 반복문
- 반복할 횟수가 정해져 있지 않을 때 주로 사용
// C
#include <stdio.h>
int main(){
int i = 0;
while (i<5) {
printf("%d\n", i); // 0부터 4까지 출력
i++;
}
return 0;
} i = 0
while i < 5:
print(i) # 0부터 4까지 출력
i += 1do-while 문
- 최소한 한 번은 코드를 실행하고, 이후 조건을 검사하여 반복을 계속할 지 결정
- Python에는 해당 조건문이 없음
// C
#include <stdio.h>
int main(){
int i = 0;
do {
printf("%d\n", i); // 0부터 4까지 출력
i++;
} while (i < 5);
return 0;
} 반복 제어문
- 반복을 즉시 종료하거나, 반복을 건너뛰게 함
Break
- 반복을 즉시 종료
Continue
- 현재 반복을 건너뛰고 다음 반복으로 진행
사용자 정의 함수
사용자 정의 함수란?
-
자신이 필요로 하는 특정 작업을 수행하기 위해 필요에 따라 작성
// C
int addAndPrint(int a, int b) {
int sum = a + b; // 두 정수의 합을 계산
return sum; // 합계를 반환
}// Java
public static int addAndPrint(int a, int b) {
int sum = a + b; // 두 정수의 합을 계산
return sum; // 합계를 반환
}# Python
def add_and_print(a, b):
sum = a + b # 두 숫자의 합을 계산
return sum