정보처리기사

스터디) 2023 정처기 실기 1회 프로그래밍 풀기

초비비 2024. 10. 11. 14:49

2023 정처기 실기 1회 정리

https://chobopark.tistory.com/372 문제 복원 블로그

문제1. static 변수, 지역 변수

class Static{
    public int a = 20;
    static int b = 0;
}
 
public class Main{
    public static void main(String[] args) {
        int a;
        a = 10;
        Static.b = a;
 
        Static st = new Static();
 
        System.out.println(Static.b++);
        System.out.println(st.b);
        System.out.println(a);
        System.out.print(st.a);
    }
}
더보기

10

11

10

20

 

  • static : 단 한번 생성되어 공유되는 변수
  • 변수가 참조하는 값의 가장 우선 순위는 자기 자신 블록 내에 있는 변수

문제2. 문자열, 포인터

#include <stdio.h>
 
int main(){
    char a[] = "Art";
    char* p = NULL;
    p = a;
 
    printf("%s\n", a);
    printf("%c\n", *p);
    printf("%c\n", *a);
    printf("%s\n", p);
 
    for(int i = 0; a[i] != '\0'; i++)
    printf("%c", a[i]);
}
더보기

Art

A

A

Art

Art

 

  • char a[], char* p : 문자열을 저장하기 위해 선언한 변수
  • p = a; : a를 단독으로 사용하면 배열의 첫 번째 주소 값을 저장
  • C언어에서 문자열을 저장하는 방법
    • 문자형 배열 이용
    • 포인터를 이용하여 문자열 저장

문제3. 문자열, 포인터

#include <stdio.h>
 
int main(){
    char* a = "qwer";
    char* b = "qwtety";
 
    for(int i = 0; a[i] != '\0' ; i++){
        for(int j = 0; b[j] != '\0'; j++){
            if(a[i] == b[j]) printf("%c", a[i]);
        }
    }
}

 

  • for(int i = 0; a[i] != '\0' ; i++) : 문자열 a를 기준으로 문자열 b를 비교

문제4. 2진수 → 10진수 변환 알고리즘

#include <stdio.h>
 
int main() {
 
    int input = 101110;
    int di = 1;
    int sum = 0;
 
    while (1) {
 
        if (input == 0) break
        else {
 
          sum = sum + (input (a)(b)) * di;
             di = di * 2;
             input = input / 10;
 
        }
    }
 
    printf("%d", sum);
 
    return 0;
}
더보기

1. (a) %  ,(b) 10 or 5 or 2
2. (a) &  ,(b) 1

 

  • di : 2진수 자리 수

문제5. 정렬 프로그램

public class Sort {
 
    public static void swap(int[] arr, int idx1, int idx2){
        int temp = arr[idx1];
        arr[idx1] = arr[idx2];
        arr[( 1 )] = temp;
    }
 
    public static void Usort(int[] array, int length){
        for (int i = 0; i < length; i++) {
            for (int j = 0; j < length - i - 1; j++) {
                if (array[j] > array[j + 1]) {
                    swap(array, j, j + 1);
                }
            }
        }
    }
 
    public static void main(String[] args) {
        int[] item = new int[] { 5, 3, 8, 1, 2, 7 };
        int nx = 6;   
        Usort(item, ( 2 ));
 
        for (int data : item) {
            System.out.print(data + " ");
        }
    }
}

출력 값 : 1 2 3 5 7 8

더보기

idx2, nx

 

  • 버블 정렬
  • Usort() : 배열의 크기 만큼 값 비교(실행), 정렬

문제6. 집합

a = {'한국', '중국', '일본'}
a.add('베트남')
a.add('중국')
a.remove('일본')
a.update({'홍콩', '한국', '태국'})
print(a)
더보기

{'한국', '중국', '베트남', '홍콩', '태국'}

 

  • 특징 : 순서가 없고 중복이 불가능

문제7. 추상클래스, 오버로딩

abstact class Vehicle {
 
    String name;
    abstract public String getName(String val);
 
    public String getName() {
            return "Vehicle name: " + name;
    }
}
 
class Car extends Vehicle {
 
    public Car(String val) {
            name=super.name=val;
    }
 
    public String getName(String val) {
            return "Car name:" + val;
    }
 
    public String getName(byte val[]) {
            return "Car name:" + val;
    }
}
 
public class Main {
 
    public static void main(String[] args) {
 
    Vehicle obj = new Car("Spark");
    System.out.println(obj.getName());
 
    }
}
더보기

Vehicle name: Spark

 

  • 추상 클래스 : 미완성 설계도
    • 클래스 들의 공통되는 필드와 메소드를 정의한 구체적이지 않은 클래스
    • 상위 클래스에는 메소드의 시그니처만 정의해놓고 그 메소드의 실제 동작 방법은 이 메소드를 상속받은 하위 클래스가 책임을 짐
    • 특징 : 1. 객체 생성X , 2. 추상 클래스와 실체 클래스는 상속 관계를 가짐

문제8. 상속, 생성자

class Parent {
    int x = 100;
 
    Parent() {
        this(500);
    }
 
    Parent(int x) {
        this.x = x;
    }
 
    int getX() {
        return x;
    }
}
 
class Child extends Parent {
    int x = 4000;
    
    Child() {
        this(5000);
    }
 
    Child(int x) {
        this.x = x;
    }
}
 
public class Main {
    public static void main(String[] args) {
        Child obj = new Child();
        System.out.println(obj.getX());
    }
}

 

 

  • 생성자 : 객체 생성 시 초기화 작업을 위한 일종의 함수
    • 객체가 처음 생성될 때 반드시 호출되고 제일 먼저 실행 됨
    • 반드시 클래스 명과 동일하게 정의해야하며, 반환 값이 X
  • 상속 관계에서 하위(자식, 서브) 객체 생성(생성자) 하면 상위(부모, 슈퍼) 객체도 생성(생성자) 된다.

📀 유튜브 문제 해설

https://youtu.be/uN0Y8aj2QDE?si=CYRF1ENd332p62KM