TIL

[TIL/정처기] 2025/04/02

21년 2회 기출 코드 정리 ✍️21-2-7-Python ⚙️비트 연산자(시프트 연산 포함)를 사용하면 정수는 자동으로 이진수로 변환되어 처리된다. 첫 번째 루프를 돌았을 때 result는 51, 두 번째 루프까지 돌았을 때 result는 26이 된다. 따라서 최종 결

2025년 4월 2일4min read

21년 2회 기출 코드 정리 ✍️

21-2-7-Python ⚙️

code
a = 100
result = 0

for i in range(1,3):
    result = a >> i
    result = result + 1

print(result)

비트 연산자(시프트 연산 포함)를 사용하면 정수는 자동으로 이진수로 변환되어 처리된다. 첫 번째 루프를 돌았을 때 result는 51, 두 번째 루프까지 돌았을 때 result는 26이 된다. 따라서 최종 결과는 26.

21-2-16-C ⚙️

code
#include <stdio.h>

main() {
    int res = mp(2, 10);
    printf("%d", res);
}

int mp(int base, int exp) {
    int res = 1;
    for(int i = 0; i < exp; i++)
        res *= base;
    return res;
}

2의 10승(1024)를 출력하는 코드. 단순 연산이고, 특별한 논점은 없다.

21-2-17-JAVA ⚙️

code
public class Test {
    public static void main(String[] args) {
        System.out.println(Test.check(1));
    }
    static String check(int num) {
        return (num >= 0) ? "positive" : "negative";
    }
}

String check 앞에, static을 적을 수 있는지 묻는 코드였다.

main 메서드에서 별도의 객체 생성 없이 Test.check(1)를 통해 직접 호출하는 모습을 확인할 수 있다. static 키워드가 붙어 있으면, 클래스의 인스턴스를 생성하지 않고도 직접 호출할 수 있게 된다. 당연히 출력 결과는 positive다.

21-2-18-C ⚙️

code
#include <stdio.h>

int main() {
    int ary[3];
    int s = 0;
    *(ary + 0) = 1;
    ary[1] = *(ary + 0) + 2;
    ary[2] = *ary + 3;
    for(int i = 0; i < 3; i++)
        s = s + ary[i];
    printf("%d", s);
}

C 언어에서의 배열과 포인터의 관계에 대해 묻는 기초적인 코드. 최종 출력 결과는 8이다.

21-2-19-JAVA ⚙️

code
public class ovr1 {
    public static void main(String[] args) {
        ovr1 a1 = new ovr1();
        ovr2 a2 = new ovr2();
        System.out.println(a1.sun(3, 2) + a2.sun(3, 2)); 
    }
    int sun(int x, int y) {
        return x + y;
    }
}

class ovr2 extends ovr1 {
    int sun(int x, int y) {
        return x - y + super.sun(x, y);
    }
}

Java에서의 메소드 오버라이딩(method overriding)과 상속(inheritance) 개념에 대해 묻는 기초적인 코드. 최종 출력 결과는 11.

이론 문제 포인트 ✍️

1. UNIX ✅

- 1960년대 AT&T 벨(Bell) 연구소, MIT, General Electric이 공동 개발한 운영체제

- 시분할 시스템(Time Sharing System)을 위해 설계된 대화식 운영체제

- 대부분 C언어로 작성되어 있어 이식성이 높으며 장치, 프로세스 간의 호환성이 높음

- 트리(Tree) 구조의 파일 시스템

2. Android ✅

- Google에서 개발한 리눅스 커널 기반의 개방형 모바일 운영체제

- 모든 코드가 공개된 개방형 소프트웨어

- 자바와 코틀린으로 애플리케이션을 작성

3. 프로세스 상태 전이 ✅

4. SJF ✅

- Shortest Job First, 준비상태 큐에서 기다리고 있는 프로세스들 중에서 실행 시간이 가장 짧은 프로세스에게 먼저 CPU를 할당하는 기법

- 가장 적은 평균 대기 시간을 제공하는 최적 알고리즘

5. HRN ✅

- Highest Response-ratio Next, 대기 시간과 서비스(실행) 시간을 이용하는 기법

- 우선순위를 계산하여 그 숫자가 가장 높은 것부터 낮은 순으로 우선순위 부여

- ``우선순위 계산식`: `(대기 시간 + 서비스 시간) / 서비스 시간``

6. RR ✅

- Round Robin, 각 프로세스를 시간 할당량(Time Slice) 동안만 실행한 후 실행이 완료되지 않으면 다음 프로세스에게 CPU를 넘겨주는 기법

- 시분할 시스템(Time Sharing System)을 위해 고안된 방식으로, 할당되는 시간의 크기가 작으면 작은 프로세스들에게 유리함

- 할당되는 시간이 클 경우 FCFS 기법과 같아지고, 할당되는 시간이 작을 경우 문맥 교환 및 오버헤드가 자주 발생되어 요청된 작업을 신속히 처리할 수 없음

7. SRT ✅

- Shortest Remaining Time, 현재 실행중인 프로세스의 남은 시간과 준비상태 큐에 새로 도착한 프로세스의 실행 시간을 비교하여 가장 짧은 실행 시간을 요구하는 프로세스에게 CPU를 할당하는 기법

- 시분할 시스템에 유용하며, 준비상태 큐에 있는 각 프로세스의 실행 시간을 추적하여 보유하고 있어야 하므로 오버헤드가 증가함

8. UNIX / LINUX 기본 명령어 ✅

- ``cat``: 파일 내용을 화면에 표시함

- ``cd``: 디렉터리 위치를 변경함

- ``chown``: 파일 소유자와 그룹을 변경함

- ``cp``: 파일을 복사함

- ``rm``: 파일을 삭제함

- ``find``: 파일을 찾음

- ``kill``: PID를 이용하여 프로세스를 종료함

- ``fork``: 새로운 프로세스를 생성함

- ``ls``: 현재 디렉터리의 파일 목록을 표시함

- ``uname``: 시스템의 이름과 버전, 네트워크 호스트명 등의 시스템 정보를 표시함

- ``mv``: 파일을 이동함

- ``ps``: 현재 실행중인 프로세스를 표시함

- ``pwd``: 현재 작업중인 디렉터리 경로를 화면에 표시함

- ``who``: 현재 시스템에 접속해 있는 사용자를 표시함

9. chmod ✅

- 파일의 보호 모드를 설정하여 파일의 사용 허가를 지정하는 UNIX 명령어

- 8진법 숫자를 이용한 방법으로도 파일의 보호 모드를 설정할 수 있음

10. IP 주소 ✅

- Internet Protocol Address, 인터넷에 연결된 모든 컴퓨터 자원을 구분하기 위한 고유한 주소

- ``IPv4(Internet Protocol version 4)``

- 8비트씩 4부분, 총 32비트로 구성되어 있음

- 네트워크 부분의 길이에 따라 A 클래스에서 E 클래스까지 총 5단계로 구성되어 있음

- ``IPv6(Internet Protocol version 6)``

- IPv4의 주소 부족 문제를 해결하기 위해 개발됨

- 16비트씩 8부분, 총 128비트로 구성되어 있음

- 각 부분을 16진수로 표현하고, 콜론(:)으로 구분함

- 인증성, 기밀성, 데이터 무결성의 지원으로 보안 문제를 해결할 수 있음