본문 바로가기
자격증(국가,민간)/정보처리기능사

[정보처리기능사 실기] 2023년 3회 기출문제 풀이

by e1mo518518 2024. 2. 4.
728x90
728x90
SMALL

[정보처리기능사 실기] 2023년 3회 기출문제 풀이

 

2. C언어 실행결과를 쓰시오.

#include <stdio.>

int main() {

        int num =15;

        print("%o", num);

}


. 코드 분석:

  • #include <stdio.h>: 표준 입출력 라이브러리를 포함합니다. 이 라이브러리는 printf 함수와 같은 입출력 함수를 제공합니다.
  • int main(): 프로그램의 시작점을 나타냅니다. 모든 C 프로그램은 main 함수를 가져야 합니다.
  • int num = 15;: num이라는 이름의 정수 변수를 선언하고 15로 초기화합니다.
  • printf("%o", num);: printf 함수를 사용하여 num의 값을 옥타 수 형식으로 출력합니다.

2. 코드 실행 과정:

  1. main 함수가 시작됩니다.
  2. num 변수가 15로 초기화됩니다.
  3. printf("%o", num); 함수가 실행됩니다.
    • %o 형식 지정자는 옥타 수 형식으로 값을 출력하도록 지시합니다.
    • num의 값은 15입니다. 15를 옥타 수로 변환하면 17입니다.
    • 따라서 printf("%o", num); 함수는 "17"을 출력합니다.
  4. main 함수가 종료됩니다.

3. 출력 결과:

17

4. 주요 개념:

  • 변수: 값을 저장하는 데 사용되는 메모리 영역입니다.
  • 데이터 형식: 변수에 저장할 수 있는 값의 종류를 결정합니다. int 형식은 정수 값을 저장하는 데 사용됩니다.
  • 초기화: 변수에 값을 할당하는 프로세스입니다.
  • 형식 지정자: printf 함수와 같은 입출력 함수에 사용되는 특수 문자입니다. %o 형식 지정자는 옥타 수 형식으로 값을 출력하도록 지시합니다.
  • 옥타 수: 8진수(octal) 시스템을 기반으로 하는 숫자 체계입니다. 0에서 7까지의 숫자를 사용하여 숫자를 표현합니다.

 

8. C언어 실행결과를 쓰시오.

#include <stdio.h>

void printBin(int n) {

      if(n>1)

                printBin(n/2);

      printf("%d", n%2);

}

int main() {

      printBin(11);

}


  • printBin 함수:
    • n이 1보다 크면 printBin(n / 2)를 재귀적으로 호출하여 n을 2로 나누어 계속 호출합니다.
    • 재귀 호출이 끝나면 printf("%d", n % 2)를 사용하여 n을 2로 나눈 나머지를 출력합니다.
  • main 함수:
    • printBin(11)을 호출하여 11을 이진수로 변환하여 출력합니다.

2. 출력 과정:

  1. main 함수에서 printBin(11)을 호출합니다.
  2. printBin(11) 함수는 11이 1보다 크므로 printBin(11 / 2)를 호출합니다.
  3. printBin(5) 함수는 5가 1보다 크므로 printBin(5 / 2)를 호출합니다.
  4. printBin(2) 함수는 2가 1보다 크므로 printBin(2 / 2)를 호출합니다.
  5. printBin(1) 함수는 1이 1보다 작으므로 재귀 호출을 중단하고 printf("%d", 1 % 2)를 실행하여 1을 출력합니다.
  6. printBin(2) 함수는 printf("%d", 2 % 2)를 실행하여 0을 출력합니다.
  7. printBin(5) 함수는 printf("%d", 5 % 2)를 실행하여 1을 출력합니다.
  8. printBin(11) 함수는 printf("%d", 11 % 2)를 실행하여 1을 출력합니다.
  9. main 함수는 printBin 함수가 종료되면 종료됩니다.

3. 출력 결과:

1011

4. 작동 원리:

이 코드는 재귀 함수를 사용하여 10진수를 이진수로 변환합니다. 재귀 함수는 자신을 호출하여 작업을 반복적으로 수행합니다. printBin 함수는 n을 2로 나누고 나머지를 출력합니다. 이 과정을 n이 1이 될 때까지 반복합니다. 1이 되면 재귀 호출이 중단되고 출력이 완료됩니다.

 


 

Python
def printBin(n):
  if n > 1:
    printBin(n // 2)
  print(n % 2)

def main():
  printBin(11)

if __name__ == "__main__":
  main()
코드를 사용할 때는 주의가 필요합니다.
content_copy

설명:

  • printBin 함수는 정수 n을 이진수로 변환하여 출력하는 재귀 함수입니다.
  • main 함수는 printBin 함수를 11에 대해 호출합니다.
  • // 연산자는 정수 몫을 계산하고, % 연산자는 나머지를 계산합니다.
  • print 함수는 주어진 값을 콘솔에 출력합니다.

주의:

  • 이 코드는 C 언어 코드와 동일한 동작을 하지만, 파이썬 언어의 구문과 스타일을 따릅니다.
  • 파이썬에서는 함수 선언 뒤에 콜론(:)을 사용하고, 코드 블록을 들여쓰기(indentation)를 사용합니다.

 

9. JAVA언어 : 실행결과를 쓰시오.

public class Gisafirst {

        public static void main(String [] args) {

                String str = "hello!@#world$%";

                String res = str. replaceAll("[^0-9a-zA-Zㄱ-ㅎㅏ-ㅣ가-힣..]", "*");

                System.out.print(res);

        }

}


코드 설명 (Gisafirst.java) Gemini에서 돌려돔.

코드 분석:

Java
public class Gisafirst {
    public static void main(String[] args) {
        String str = "hello!@#world$%";
        String res = str.replaceAll("[^0-9a-zA-Zㄱ-ㅎㅏ-ㅣ가-힣..]", "*");
        System.out.print(res);
    }
}
코드를 사용할 때는 주의가 필요합니다.
content_copy

1. 클래스 및 메서드:

  • public class Gisafirst: 이 코드는 Gisafirst라는 이름의 공개 클래스를 선언합니다. 클래스는 객체를 생성하기 위한 설계도이며 데이터(필드)와 동작(메서드)을 캡슐화합니다.
  • public static void main(String[] args): 이 코드는 프로그램의 진입점인 main 메서드를 정의합니다. 프로그램 실행은 여기서 시작됩니다.

2. 문자열 처리:

  • 문자열 선언:
    • String str = "hello!@#world$%";: 이 코드는 str이라는 이름의 문자열 변수를 선언하고 값 "hello!@#world$%"로 초기화합니다. 문자열 변수는 문자 시퀀스를 저장합니다.
  • 정규 표현식을 사용한 문자 치환:
    • String res = str.replaceAll("[^0-9a-zA-Zㄱ-ㅎㅏ-ㅣ가-힣..]", "*");: 이 코드는 다음 작업을 수행합니다.
      1. str.replaceAll(): 이 메서드는 str 문자열 객체를 대상으로 문자열의 일부를 바꿉니다.
      2. []: 이는 정규 표현식으로 매칭될 수 있는 문자 집합을 정의하는 문자 클래스입니다.
      3. ^: 캐럿 기호는 문자 클래스 내부의 문자가 매칭되지 않아야 한다는 것을 나타냅니다.
      4. [0-9a-zA-Zㄱ-ㅎㅏ-ㅣ가-힣..]: 정규 표현식의 이 부분은 다음과 같은 다양한 문자를 매칭합니다.
        • [0-9]: 숫자 (0-9)를 매칭합니다.
        • [a-zA-Z]: 소문자 또는 대문자 알파벳 (a-z, A-Z)을 매칭합니다.
        • [ㄱ-ㅎ]: 한글 자음 (ㄱ-ㅎ)을 매칭합니다.
        • [ㅏ-ㅣ]: 한글 모음 (ㅏ-ㅣ)을 매칭합니다.
        • [가-힣]: 대부분의 한글 문자 (가-힣)를 매칭합니다.
        • .: 개행 문자를 제외한 모든 단일 문자를 매칭합니다.
        • ..: 개행 문자를 포함하여 모든 두 문자를 매칭합니다.
      5. *: 이 문자는 바꿀 문자가 별표(*)가 되어야 한다는 것을 나타냅니다.
      6. ;: 세미콜론은 문을 종료합니다.
  • 결과 출력:
    • System.out.print(res);: 이 코드는 res 문자열 변수의 값을 콘솔에 출력합니다. System.out 객체는 입력 및 출력 작업에 사용됩니다.

예상 출력:

정규 표현식은 원본 문자열 "hello!@#world$%"의 모든 문자를 매칭하지만 느낌표 (!)와 달러 기호 ($)는 제외합니다. 따라서 프로그램의 출력은 다음과 같습니다. ??????? 왜 위의 두개는 제외되지???

hello*world*

 

clova x => hello*world*

ChatGPT 3.5 => hello**world

뤼튼은 값을 못내준다.

어떤게 맞는걸까???


12. JAVA언어 : 실행결과를 쓰시오.

public class Gisafirst {

    public static void main(String[] args) {

       String str = “1,2,3,4,,,5,6,7,,8,9”;

       String splt[] = str.split(“,”);

       for(int i=0; i<splt.length;i++);

           System.out.print(splt[i]);

               if((i+1)%3==0){

                   System.out.println();

               }

           }

     }

}


코드 설명 (Gisafirst.java)

1. 클래스 선언:

  • public class Gisafirst: 이 코드는 Gisafirst라는 이름의 공개 클래스를 선언합니다. 클래스는 객체를 생성하기 위한 설계도이며 데이터(필드)와 동작(메서드)을 캡슐화합니다. 이 경우 클래스는 main 메서드를 위한 컨테이너 역할을 합니다.

2. 메인 메서드:

  • public static void main(String[] args): 이 코드는 Java 프로그램의 진입점입니다. main 메서드는 프로그램 실행이 시작되는 곳입니다. 명령줄 인수를 프로그램에 전달하는 데 사용할 수 있는 문자열 배열 (args)을 인수로 받습니다. 하지만 이 코드는 이 특정 인스턴스에서 이를 사용하지 않습니다.

3. 문자열 초기화:

  • String str = "1,2,3,4,,,5,6,7,,8,9";: 이 코드는 str이라는 이름의 문자열 변수를 선언하고 값 "1,2,3,4,,,5,6,7,,8,9"로 초기화합니다. 이 문자열은 쉼표로 구분된 숫자를 포함합니다.

4. 문자열 분할:

  • String[] splt = str.split(",");: 이 코드는 쉼표 (",")를 구분자로 사용하여 str 문자열을 분할합니다. split 메서드는 문자열 배열을 반환하며, 배열의 각 요소는 원래 문자열에서 구분자로 분리된 서브 문자열을 나타냅니다. 따라서 splt는 이제 ["1", "2", "3", "4", ..., "9"]와 같은 개별 숫자를 포함하는 배열이 됩니다.

5. 분할된 요소 처리를 위한 루프:

  • for (int i = 0; i < splt.length; i++): 이 코드는 splt 배열을 반복하는 for 루프를 시작합니다. 루프 변수 i는 정수이며 카운터 역할을 하며 0에서 시작하여 배열 길이보다 하나 작은 값까지 증가합니다 (splt.length - 1).
  • System.out.print(splt[i]);: 루프 내부에서 이 코드는 splt 배열의 각 요소(각 숫자)를 줄 바꿈 문자를 추가하지 않고 출력합니다. 따라서 숫자는 연속적으로 출력됩니다.

6. 조건부 줄 바꿈 출력:

  • if ((i + 1) % 3 == 0 && i < splt.length - 1): 이 if 문은 두 가지 조건을 확인합니다.
    • (i + 1) % 3 == 0: 이 조건은 현재 인덱스 (i)에 1을 더한 값이 3으로 나누어 떨어지는지 확인합니다. 그렇다면 3개의 요소 그룹의 끝에 도달한 것을 의미합니다(마지막 요소는 제외).
    • i < splt.length - 1: 이 조건은 출력의 끝에 추가 줄 바꿈을 출력하지 않도록 합니다.
  • System.out.println();: if 문의 두 조건이 모두 참이면 이 코드는 줄 바꿈 문자를 출력하여 3개의 요소 그룹마다 다음 줄로 이동합니다.

예상 출력: 해설과 다르다???

1 2 3
4 5 6
7 8 9

주요 개선 사항:

  • 수정된 오타 (length 대신 lenth)는 배열 길이에 대한 적절한 액세스를 보장합니다.
  • 루프 조건 뒤에 제거된 빈 세미콜론은 무한 루프를 방지합니다.
  • i < splt.length - 1을 사용한 향상된 if 조건은 끝에 추가 줄 바꿈을 방지합니다.
유튜브 해설 chat gpt clova x gemini
123
4
567
89
123
4
5
678
9
1
2
3
5
6
7
9
123
456
789

13. JAVA언어

public class Gisafirst {
    public static void main(String[] args) {
        String str1 = "Helloworld!";
        String str2 = "HElloWOrld!";
        if (str1.equals(str2)) {
            System.out.println(str1.toUpperCase());
        } else if (str1.equalsIgnoreCase(str2)) {
            System.out.println(str1.toLowerCase());
        }
    }
}

결과 : helloworld!

코드 설명

  1. String str1 = "Helloworld!"; : str1 변수에 "Helloworld!"라는 문자열을 저장합니다.
  2. String str2 = "HElloWOrld!"; : str2 변수에 "HElloWOrld!"라는 문자열을 저장합니다.
  3. if (str1.equals(str2)) : str1과 str2의 문자열이 정확히 동일한지 비교합니다. 동일하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
  4. System.out.println(str1.toUpperCase()); : str1의 모든 문자를 대문자로 변환하여 출력합니다. 예를 들어, str1이 "Helloworld!"라면 "HELLOWORLD!"가 됩니다.
  5. else if (str1.equalsIgnoreCase(str2)) : str1과 str2의 문자열이 대소문자를 구분하지 않고 동일한지 비교합니다. 동일하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
  6. System.out.println(str1.toLowerCase()); : str1의 모든 문자를 소문자로 변환하여 출력합니다. 예를 들어, str1이 "Helloworld!"라면 "helloworld!"가 됩니다.

이유

  1. str1.equals(str2)는 false를 반환합니다. 왜냐하면 "Helloworld!"와 "HElloWOrld!"는 대소문자가 달라서 정확히 동일하지 않기 때문입니다.
  2. str1.equalsIgnoreCase(str2)는 true를 반환합니다. 왜냐하면 "Helloworld!"와 "HElloWOrld!"는 대소문자를 무시하면 동일한 문자열이기 때문입니다.
  3. 따라서 str1.toLowerCase()가 실행되어 str1을 소문자로 변환한 "helloworld!"가 출력됩니다.

20. C언어 : 실행결과를 쓰시오.

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

void delBI(char a[] {

    int len = strlen(a);

    char *b = (char*mallosizeof(char)*len);

    int i, k = 0

    for (i=0;i<len;i++) {

        if(a[i]!=' ')

            b[k++] = a[i];

    }

    b[k] = '\0';

    strcpy(a,b);

    free(b);

}

int main() {

    char a[] = 'A B c D e F ! ";

    delBI(a);

printf("%s",a);

}

 

3. 코드 설명:

1) #include 구문:

  • #include <stdio.h>: 표준 입력/출력 함수를 사용하기 위한 헤더 파일입니다.
  • #include <stdlib.h>: 메모리 할당 및 해제를 위한 함수를 사용하기 위한 헤더 파일입니다.
  • #include <string.h>: 문자열 처리 함수를 사용하기 위한 헤더 파일입니다.

2) delBI 함수:

  • void delBI(char a[]): a라는 이름의 문자열 배열을 인자로 받는 함수입니다.
  • int len = strlen(a);: a 문자열 배열의 길이를 변수 len에 저장합니다.
  • char *b = (char *)malloc(sizeof(char) * len);: len 길이의 새로운 문자열 배열 b를 메모리에 동적으로 할당합니다.
  • int i, k = 0;: 반복문을 위한 변수 i와 k를 초기화합니다.
  • for (i = 0; i < len; i++): a 문자열 배열의 모든 문자를 반복적으로 검사합니다.
    • if (a[i] != ' '): 만약 현재 문자가 공백이 아니라면
      • b[k++] = a[i];: b 문자열 배열에 현재 문자를 저장하고, k 인덱스를 1씩 증가시킵니다.
  • b[k] = '\0';: b 문자열 배열의 마지막 문자를 null 문자로 설정하여 문자열임을 표시합니다.
  • strcpy(a, b);: b 문자열 배열의 내용을 a 문자열 배열에 복사합니다.
  • free(b);: 동적으로 할당된 메모리 공간 b를 해제합니다.

3) main 함수:

  • int main(): 프로그램의 시작점을 나타내는 함수입니다.
  • char a[] = "A B c D e F ! ";: "A B c D e F ! "라는 문자열을 a라는 이름의 문자열 배열에 저장합니다.
  • delBI(a);: delBI 함수를 호출하여 a 문자열 배열에서 공백을 제거합니다.
  • printf("%s", a);: a 문자열 배열의 내용을 화면에 출력합니다.
  • return 0;: 프로그램을 정상적으로 종료합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

https://youtu.be/AunDOTgIVwg?si=t0Jabx-coLYiODY0

 

LIST