정보처리기사 실기 : 메타코드M 실기 강의(5-1 프로그래밍 공통)

이 글에 들어가기 전에..

5-1. 프로그래밍 - 공통 영역 (16:28)

  • 코딩 관련 문제의 비중이 점점 커져가는 추세.
    • 5 ~ 60%의 비중을 차지하기 때문에 프로그래밍 과목은 중요함

프로그래밍 언어 소개

  • 기계어는 0과 1로 이루어진 가장 저수준의 언어
  • 기계어는 인간이 이해하고 사용하기 매우 어렵기 때문에, C / Python 등의 고급 프로그래밍 언어로 발전
  • 고급 언어일수록 변수 선언 등을 통해 복잡한 하드웨어 세부사항을 신경쓰지 않을 수 있고, 사용이 편리해짐

변수

변수란?

  • 어떤 값을 주기억 장치에 기억하기 위해 사용하는 공간
  • 변수를 선언하면 주기억 장치(메모리)에서 특정 위치와 공간을 할당받아, 그 위치에 데이터를 저장할 수 있게 됨
  • 변수 설정에는 일반적인 규칙이 있음
  • 데이터 타입에 따라 할당받는 공간의 크기가 달라짐

변수 설정 규칙

  • 변수 설정에는 일반적으로 규칙이 존재함
  1. 사용 가능 문자
  • 알파벳 문자(a-z/A-Z), 밑줄(_), 숫자 등 사용 가능

(O) age, Age, A_ge, a24_
(X) a-ge, age?, a>\<ge, age!

  1. 문자 배치 규칙
  • 첫 자리에는 숫자를 사용할 수 없음
  • 띄어쓰기를 사용할 수 없음, 주로 _를 대신 사용

(O) age10, average_age
(X) 10age, average age, average-age

  1. 예약어 사용 금지
  • 각 프로그래밍 언어 별로 특정 기능을 나타내는 예약어가 있으며, 이를 변수명으로 사용 불가

for, while, if, else, class, int, short, long, do, break, void ...

자료형 (C/Java)

  • 변수에 저장될 데이터의 종료와 크기를 정의하는 프로그래밍 언어의 속성
  1. 정수형 (integer)
  • 정수를 저장
  • 기본은 int(4바이트)
  • 할당이 필요한 크기에 따라 short(2바이트), long(8바이트) 등의 자료형도 사용법
  1. 부동 소수형(floating point)
  • 실수를 저장
  • 기본은 float(4바이트)이며, 할당 크기에 따라 double(8바이트) 등의 자료형을 사용
  1. 문자형(character)
  • 단일 문자를 저장
  • 기본은 char
    • C는 1바이트, Java는 2바이트
  1. 문자열(string)
  • 여러 문자를 저장
  • C의 경우, char로 배열을 만들어 여러 문자를 저장하며, Java의 경우 string 자료형을 사용
  1. 논리형(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 += 1

do-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