Tech Trail

[정보처리기사 실기] 2021년 1회 기출 코드 해설 (C언어, Java, Python) 본문

Learning/정보처리기사

[정보처리기사 실기] 2021년 1회 기출 코드 해설 (C언어, Java, Python)

_밍지_ 2023. 11. 16. 08:48
728x90
반응형
SMALL

2021년 1회 5번 문제

다음은 파이썬 코드이다. 출력 결과를 쓰시오.

class Soojebi:
  li= ["Seoul", "Kyeonggi", "Inchon",
      "Daejeon", "Daegu", "Pusan"]

s = Soojebi()
str01 = ' '
for i in s.li:
  str01 = str01 + i[0]

print(str01)
  1. 클래스 Soojebi를 생성하였습니다. 이 클래스 안에는 li라는 이름의 리스트가 초기화되어 있습니다.
  2. 그런 다음 for 루프를 사용하여 s.li 리스트의 각 요소를 하나씩 i에 할당합니다.
  3. 처음으로 나오는 요소는 "Seoul"이므로 i에 "Seoul"이 할당됩니다. i에 "Seoul"이 할당될 때, str01이라는 문자열 변수에 i[0] 즉, 첫 번째 문자 "S"가 추가됩니다. 이때 str01은 아무 문자도 포함하지 않는 빈 문자열입니다.
  4. 다음으로는 "Kyeonggi"가 나오며, i에 "Kyeonggi"가 할당됩니다. i에 "Kyeonggi"가 할당될 때, i[0] 즉, 첫 번째 문자 "K"가 str01에 추가됩니다. str01은 이제 "SK"입니다.
  5. 다시 올라가서 3번째 요소 "Inchon"이 i에 할당되며, i[0] 즉, 첫 번째 문자 "I"가 str01에 추가됩니다. str01은 "SKI"입니다.
  6. 이어서 4번째 요소 "Daejeon"이 i에 할당되고, i[0] 즉, 첫 번째 문자 "D"가 str01에 추가됩니다. str01은 "SKID"입니다.
  7. 그 다음으로 5번째 요소 "Daegu"가 i에 할당되고, i[0] 즉, 첫 번째 문자 "D"가 str01에 추가됩니다. str01은 "SKIDD"입니다.
  8. 마지막으로 6번째 요소 "Pusan"이 i에 할당되며, i[0] 즉, 첫 번째 문자 "P"가 str01에 추가됩니다. str01은 최종적으로 "SKIDDP"가 됩니다.
  9. 즉, str01 변수에는 "SKIDDP"라는 문자열이 저장되고, 이 문자열이 마지막에 출력됩니다.

<출력>

SKIDDP

<참고> 코드에서 str01에 문자들을 계속 추가하다가 for 루프가 종료된 후 print(str01)을 호출하면 str01에 누적된 문자열이 출력됩니다. 따라서 str01을 출력할 때 이미 줄 바꿈이 필요하지 않습니다.

이때 만약 줄 바꿈을 추가하려면 print(str01) 대신 print(str01, end='\n')과 같이 end 매개변수에 줄 바꿈 문자를 지정해야 합니다.

 

2021년 1회 7번 문제

다음은 Java 프로그램 결과를 쓰시오.

public class Soojebi {
    public static void main(String[] args) {
        int[][] arr = new int[][]{{45, 50, 75}, {89}};
        System.out.println(arr[0].length);
        System.out.println(arr[1].length);
        System.out.println(arr[0][0]);
        System.out.println(arr[0][1]);
        System.out.println(arr[1][0]);
    }
}

2차원 배열이며 다음과 같이 구성됩니다.

     0열 1열 2열

0행  45  50  75

1행  89
  • System.out.println(arr[0].length);: 0행의 길이를 출력하는 구문입니다. 0행에는 3개의 열이 있으므로 결과는 3이 됩니다. 그리고 Enter.
  • System.out.println(arr[1].length);: 1행의 길이를 출력하는 구문입니다. 1행에는 1개의 열만 있으므로 결과는 1이 됩니다. 그리고 Enter.
  • System.out.println(arr[0][0]);: 0행 0열의 값을 출력하는 구문입니다. 0행 0열에는 45가 있으므로 결과는 45가 됩니다. 그리고 Enter.
  • System.out.println(arr[0][1]);: 0행 1열의 값을 출력하는 구문입니다. 0행 1열에는 50이 있으므로 결과는 50이 됩니다. 그리고 Enter.
  • System.out.println(arr[1][0]);: 1행 0열의 값을 출력하는 구문입니다. 1행 0열에는 89가 있으므로 결과는 89가 됩니다.

 

2021년 1회 15번 문제

다음은 C언어 프로그램이다. 실행 결과를 쓰시오.

#include <stdio.h>

struct Soojebi {
    char name[10];
    int age;
};

void main() {
    struct Soojebi s[] = {"Kim", 28, "Lee", 38,
                         "See", 50, "Park", 35};
    struct Soojebi *p;
    p = s;
    p++;
    printf("%s\n", p->name);
    printf("%d\n", p->age);
}
  1. struct Soojebi라는 사용자 정의 데이터 타입(구조체)을 정의합니다. 구조체는 여러 가지 데이터 형식을 하나로 묶어서 사용자 정의 데이터 타입을 생성하는 데 사용됩니다. 이 구조체에는 두 개의 멤버 변수인 name (문자열)과 age (정수)가 포함되어 있습니다. 이러한 구조체를 사용하여 이름과 나이 정보를 하나로 묶을 수 있습니다.
  2. main 함수에서 Soojebi 구조체 배열인 s를 선언하고 초기화합니다. 이 두 변수를 활용하여 배열인 's'에 데이터를 두 개씩 집어넣었습니다. 예를 들어, s 배열의 0번 인덱스에 "Kim"과 28이, 1번 인덱스에 "Lee"와 38이 초기화되어 있습니다.
  3. 포인터 변수 p를 선언하고, 이를 배열 s의 시작 주소로 초기화합니다. 따라서 p는 현재 배열 s의 첫 번째 요소를 가리킵니다.
  4. p++ 연산을 통해 포인터 p를 다음 요소로 이동시킵니다. 이로써 p는 현재 배열 s에서 두 번째 요소를 가리키게 됩니다.
  5. printf 함수를 사용하여 현재 p가 가리키는 구조체의 name (문자열)과 age (정수)를 출력합니다. 이로써 두 번째 요소인 "Lee"와 38이 출력됩니다.

<출력>

Lee
38

 

2021년 1회 17번 문제

다음은 Java 프로그램이다. 실행 결과를 쓰시오.

public class Soojebi {
    public static void main(String[] args) {
        int i, j;
        for (j = 0, i = 0; i <= 5; i++) {
            j += i;
            System.out.print(i);
            if (i == 5) {
                System.out.print("=");
                System.out.print(j);
            } else {
                System.out.print("+");
            }
        }
    }
}

1. i의 초기 값은 0이며, i가 5 이하인 동안 다음을 실행합니다.

  • i <= 5에서 현재 i는 0이므로 조건은 참입니다.
  • 그런 다음 j에 현재 j 값에 i를 추가한 값을 할당합니다. 결과적으로 j는 0 + 0 = 0이 됩니다.
  • System.out.print(i);를 호출하면 0이 출력됩니다. 이때 print 메서드를 사용하여 변수 i의 값을 출력하기 때문에 줄바꿈이 되지 않습니다. 줄 바꿈 문자를 출력하려면 System.out.println(i);와 같이 print 메서드 대신 println 메서드를 사용해야 합니다. (참고)
  • if 문에서 현재 i는 0이므로 i == 5는 거짓입니다. 따라서 if 블록이 실행되지 않고, else 블록이 실행되어 +가 출력됩니다. 따라서 현재까지의 출력은 "0+"입니다.

2. 다음으로 i를 증가시켜 i는 1이 됩니다.

  • i <= 5에서 현재 i는 1이므로 조건은 참입니다.
  • 그런 다음 j에 현재 j 값에 i를 추가한 값을 할당합니다. 결과적으로 j는 0 + 1 = 1이 됩니다.
  • System.out.print(i);를 호출하면 1이 출력됩니다. 이때, 줄 바꿈이 되지 않고 현재 줄에 출력됩니다.
  • if 문에서 현재 i는 1이므로 i == 5는 거짓입니다. 따라서 if 블록이 실행되지 않고, else 블록이 실행되어 +가 추가로 출력됩니다. 따라서 현재까지의 출력은 "0+1+"입니다.

3. 다음으로 i를 증가시켜 i는 2가 됩니다.

  • i <= 5에서 현재 i는 2이므로 조건은 참입니다.
  • 그런 다음 j에 현재 j 값에 i를 추가한 값을 할당합니다. 결과적으로 j는 1 + 2 = 3이 됩니다.
  • System.out.print(i);를 호출하면 2이 출력됩니다.
  • if 문에서 현재 i는 2이므로 i == 5는 거짓입니다. 따라서 if 블록이 실행되지 않고, else 블록이 실행되어 +가 추가로 출력됩니다. 따라서 현재까지의 출력은 "0+1+2+"입니다.

4. 다음으로 i를 증가시켜 i는 3이 됩니다.

  • i <= 5에서 현재 i는 3이므로 조건은 참입니다.
  • 그런 다음 j에 현재 j 값에 i를 추가한 값을 할당합니다. 결과적으로 j는 3 + 3 = 6이 됩니다.
  • System.out.print(i);를 호출하면 3이 출력됩니다.
  • if 문에서 현재 i는 3이므로 i == 5는 거짓입니다. 따라서 if 블록이 실행되지 않고, else 블록이 실행되어 +가 추가로 출력됩니다. 따라서 현재까지의 출력은 "0+1+2+3+"입니다.

5. 다음으로 i를 증가시켜 i는 4가 됩니다.

  • i <= 5에서 현재 i는 4이므로 조건은 참입니다.
  • 그런 다음 j에 현재 j 값에 i를 추가한 값을 할당합니다. 결과적으로 j는 6 + 4 = 10이 됩니다.
  • System.out.print(i);를 호출하면 4이 출력됩니다.
  • if 문에서 현재 i는 4이므로 i == 5는 거짓입니다. 따라서 if 블록이 실행되지 않고, else 블록이 실행되어 +가 추가로 출력됩니다. 따라서 현재까지의 출력은 "0+1+2+3+4+"입니다.

6. 다음으로 i를 증가시켜 i는 5가 됩니다.

  • i <= 5에서 현재 i는 5이므로 조건은 참입니다.
  • 그런 다음 j에 현재 j 값에 i를 추가한 값을 할당합니다. 결과적으로 j는 10 + 5 = 15가 됩니다.
  • System.out.print(i);를 호출하면 5가 출력됩니다.
  • if 문에서 현재 i는 5이므로 i == 5는 참이므로 "="가 출력됩니다. 현재까지의 출력은 "0+1+2+3+4+5="입니다.
  • 마지막으로 j의 최종 값을 출력하기 위해 System.out.print(j);를 호출합니다. j는 모든 루프 반복에서 i 값과 누적되어 0 + 1 + 2 + 3 + 4 + 5 = 15가 됩니다. 따라서 최종 출력은 "0+1+2+3+4+5=15"가 됩니다.

<출력>

0+1+2+3+4+5=15
728x90
반응형
LIST