본문 바로가기
기타/정보처리기사

정보처리기사 정처기 | 실기 6 프로그래밍 언어 활용 | C언어, 자바, 파이썬 | 단원별 정리

by YUNI Heo 2023. 3. 8.
반응형

 

✅ 15. C언어

  • 절차 지향적인 프로그래밍 언어로 컴퓨터가 실행해야 하는 순서대로 프로그램을 작성한다.
  • 다양한 데이터 타입과 연산자를 제공하며, 메모리 관리에 대한 직접적인 제어가 가능하다.
  • 운영체제, 임베디드 시스템, 네트워크, 게임 등 다양한 분야에서 활용한다.

 

💡 자료형

메모리에 데이터가 저장되는 형식이다.


 

https://hongku.tistory.com/49

정수형

  • char: %c, 1바이트, -128 ~ 127
  • short: %d, 2바이트, -32,768 ~ 32,767 
  • int: %d, 4바이트, -2,147,483,648 ~ 2,147,483,647
  • long: 4바이트, -2,147,483,648 ~ 2,147,483,647
  • long long: 8바이트, -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807

 

실수형

  • float: %f, 4바이트, ±3.4x10^-37 ~ ±3.4x10^38
  • double: %lf, 8바이트, ±1.7x10^-307 ~ ±3.4x10^308
  • long double: 8바이트

서식문자(Conversion Specifier)

출력하고자 하는 변수의 출력 형태를 지정한다.

  • %d: 10진 정수형 출력
    %u: 부호 없는 10진 정수형 출력
    %o: 8진 정수형 출력
    %x: 16진 정수형 출력
  • %c: 문자 출력
    %s: 문자열 출력
  • %f: 실수형 출력
    %e: 지수형 출력
    %g: e와 f 중에서 출력할 자리를 덜 차지하는 형태로 출력
  • %p: 포인터의 주소값 출력 

💡 식별자 Identifier

  • 변수, 상수, 함수 등에 이름을 부여한다.
  • 첫 글자는 문자언더바()로 시작한다.
  • 대소문자를 구분하며, 길이 제한은 없다. 
#include <stdio.h>

int main() {
  int my_variable = 10;
  int _my_variable = 20;
  int myVariable = 30;
  
  printf("%d\n", my_variable);
  printf("%d\n", _my_variable);
  printf("%d\n", myVariable);
  
  return 0;
}

 

💡 변수 Variable

  • 값을 저장하는 공간이다.
  • 선언과 동시에 초기화할 수 있다.
  • 포인터(pointer) 변수를 통해 메모리 주소를 직접 다룬다.
#include <stdio.h>

int main() {
  int num1 = 10;
  int num2 = num1;
  int* num_ptr = &num1;
  
  printf("num1의 값: %d\n", num1);
  printf("num2의 값: %d\n", num2);
  printf("num1의 주소: %p\n", &num1);
  printf("num2의 주소: %p\n", &num2);
  printf("num_ptr이 가리키는 값: %d\n", *num_ptr);
  printf("num_ptr의 주소: %p\n", &num_ptr);
  
  return 0;
}

 

💡 표준 입출력 함수

  • scanf() 함수: 사용자로부터 입력을 받기 위해 사용되며, 형식 지정자를 이용하여 입력받을 값의 형식을 지정한다.
  • printf() 함수: 출력을 위해 사용되며, 형식 지정자를 이용하여 출력할 값의 형식을 지정한다.
#include <stdio.h>

int main() {
  int num;
  char str[100];
  
  printf("정수를 입력하세요: ");
  scanf("%d", &num);
  printf("입력한 정수는 %d입니다.\n", num);
  
  printf("문자열을 입력하세요: ");
  scanf("%s", str);
  printf("입력한 문자열은 %s입니다.\n", str);
  
  return 0;
}

 

💡 연산자 Operator

  • 값을 연산하는 데 사용되는 기호이다.
  • 산술 연산자: +, -, *, /, %
  • 비교 연산자: >, >=, <, <=, ==, !=
  • 논리 연산자: &&, ||, !
#include <stdio.h>

int main() {
  int a = 10;
  int b = 3;
  int result1 = a + b;
  int result2 = a - b;
  int result3 = a * b;
  int result4 = a / b;
  int result5 = a % b;
  
  printf("a + b = %d\n", result1);
  printf("a - b = %d\n", result2);
  printf("a * b = %d\n", result3);
  printf("a / b = %d\n", result4);
  printf("a %% b = %d\n", result5);
  
  int c = 5;
  int d = ++c;
  int e = c++;
  
  printf("c = %d, d = %d, e = %d\n", c, d, e);
  
  return 0;
}

 

💡 조건문 Conditional 

  • 특정 조건에 따라 다른 코드를 실행한다.
  • 조건문에 대한 괄호가 필수가 아니며, 중첩된 if문을 사용할 수 있다.
#include <stdio.h>

int main() {
  int num;
  
  printf("정수를 입력하세요: ");
  scanf("%d", &num);
  
  if (num > 0) {
    printf("입력한 수는 양수입니다.");
  } else if (num < 0) {
    printf("입력한 수는 음수입니다.");
  } else {
    printf("입력한 수는 0입니다.");
  }
  
  return 0;
}

 

💡 반복문 Loop

  • 특정한 조건이 만족하는 동안 코드를 반복한다.
#include <stdio.h>

int main() {
  int i;
  
  for (i = 1; i <= 5; i++) {
    printf("%d\n", i);
  }
  
  i = 1;
  while (i <= 5) {
    printf("%d\n", i);
    i++;
  }
  
  i = 1;
  do {
    printf("%d\n", i);
    i++;
  } while (i <= 5);
  
  return 0;
}

 

💡 배열 Array

  • 동일한 자료형의 데이터를 하나의 변수로 저장한다.
  • 인덱스(index)를 이용하여 각 원소에 접근한다.
  • 배열의 크기는 선언 시 명시하거나 초기화 시에 결정한다.
#include <stdio.h>

int main() {
  int arr1[5] = {1, 2, 3, 4, 5};
  int arr2[] = {1, 2, 3, 4, 5};
  int arr3[5];
  
  for (int i = 0; i < 5; i++) {
    arr3[i] = i + 1;
  }
  
  printf("arr1[0] = %d, arr1[1] = %d, arr1[2] = %d, arr1[3] = %d, arr1[4] = %d\n", arr1[0], arr1[1], arr1[2], arr1[3], arr1[4]);
  printf("arr2[0] = %d, arr2[1] = %d, arr2[2] = %d, arr2[3] = %d, arr2[4] = %d\n", arr2[0], arr2[1], arr2[2], arr2[3], arr2[4]);
  printf("arr3[0] = %d, arr3[1] = %d, arr3[2] = %d, arr3[3] = %d, arr3[4] = %d\n", arr3[0], arr3[1], arr3[2], arr3[3], arr3[4]);
  
  return 0;
}

 

💡 문자열 String

  • 문자의 배열로 표현한다.
  • 널(null) 문자('\0')로 문자열의 끝을 나타낸다.
#include <stdio.h>
#include <string.h>

int main() {
  char str1[10] = "Hello";
  char str2[] = "World";
  char str3[20];
  
  strcpy(str3, str1);
  strcat(str3, str2);
  
  printf("str1: %s\n", str1);
  printf("str2: %s\n", str2);
  printf("str3: %s\n", str3);
  
  printf("str3의 길이: %ld\n", strlen(str3));
  
  return 0;
}

 

💡 구조체 Structure

  • 다른 자료형의 변수들을 묶어 하나의 자료형으로 정의한다.
  • 멤버(member)를 이용하여 각 원소에 접근한다.
#include <stdio.h>

struct Student {
  char name[10];
  int age;
  int score;
};

int main() {
  struct Student s1 = {"John", 20, 90};
  struct Student s2 = {"Mary", 21, 95};
  
  printf("%s의 나이는 %d이고, 성적은 %d점입니다.\n", s1.name, s1.age, s1.score);
  printf("%s의 나이는 %d이고, 성적은 %d점입니다.\n", s2.name, s2.age, s2.score);
  
  return 0;
}

 

💡 함수 Function

  • 특정한 작업을 수행하는 코드 블록으로, 호출(call)하여 사용한다.
  • 코드의 재사용성을 향상한다.
#include <stdio.h>

int add(int x, int y) {
  return x + y;
}

int main() {
  int a = 5, b = 3, result;
  
  result = add(a, b);
  
  printf("%d + %d = %d\n", a, b, result);
  
  return 0;
}

 

💡 포인터 Pointer

  • 변수의 주소를 저장하는 변수입니다. 
  • 메모리 상의 값을 직접 조작할 수 있다.
  • 동적 메모리 할당과 함수 호출에서 사용한다.
  • * 연산자를 이용하여 해당 주소에 접근한다.
  • & 연산자를 이용하여 변수의 주소를 얻는다.
#include <stdio.h>

int main() {
  int num = 5;
  int *p;
  
  p = &num;
  
  printf("num의 값: %d\n", num);
  printf("num의 메모리 주소: %p\n", &num);
  printf("p가 가리키는 변수의 값: %d\n", *p);
  printf("p가 가리키는 변수의 메모리 주소: %p\n", p);
  
  return 0;
}

 

💡 기출

[단답형] 2020년 1회

다음은 C언어 소스 코드이다. 출력 결과를 쓰시오.

#include <stdio.h>

void main()
{
    int i, j, temp;
    int a[5] = {95, 75, 85, 100, 50};

    // 버블 정렬 알고리즘 적용
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 4 - i; j++)
        {
            if (a[j] > a[j + 1])
            {
                temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
            }
        }
    }

    // 정렬된 배열 출력
    for (i = 0; i < 5; i++)
    {
        printf("%d ", a[i]);
    }
    return 0;
}
  • 50 75 85 95 100

 

[해설]

버블 정렬(Bubble Sort)

  • 배열을 순차적으로 탐색하며 인접한 두 요소를 비교하여 큰 값을 뒤로 보내는 과정을 반복한다.
  • 한 번의 탐색에서 가장 큰 값이 맨 뒤에 위치하게 되며, 이를 제외한 배열을 다시 탐색하여 정렬을 완료한다.
// 버블정렬 함수 정의
void bubble_sort(int arr[], int size) {
  int temp, i, j;
  
  // 외부 반복문은 정렬할 배열의 길이에서 1을 뺀 만큼 반복
  for(i = 0; i < size - 1; i++) {
    // 내부 반복문은 현재 위치와 이후 위치의 원소를 비교하여 정렬
    for(j = 0; j < size - i - 1; j++) {
      if(arr[j] > arr[j + 1]) {
        // 크기가 작은 원소를 왼쪽으로 이동
        temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
}

[단답형] 2020년 3회

다음은 C언어 소스 코드이다. 출력 결과를 쓰시오.

#include <stdio.h>

void main()
{
    int i = 0, c = 0;  // 변수 i와 c를 선언하고, 0으로 초기화

    while (i < 10)  // i가 10보다 작은 동안 반복
    {
        i++;  // i를 1씩 증가
        c *= i;  // c에 i를 곱한 값을 저장
    }

    printf("%d", c);  // c의 값을 출력
}
  • 0

[단답형] 2020년 3회

다음은 C언어 소스 코드이다. 출력 결과를 쓰시오.

#include <stdio.h>

int r1() // 4를 반환하는 함수
{
    return 4;
}

int r10() // 30 + r1()의 결과를 반환하는 함수
{
    return (30 + r1());
}

int r100() // 200 + r10()의 결과를 반환하는 함수
{
    return (200 + r10());
}

int main()
{
    printf("%d\n", r100()); // r100()의 결과를 출력
    return 0;
}
  • 234

[약술형] 2020년 3회

헝가리안 표기법(Hungarian Case)에 대해서 서술하시오.

  • 식별자 표기 시 접두어에 자료형을 붙이는 표기법이다.

 

[해설]

  • 헝가리안 표기법(Hungarian Notation)
    • 변수나 함수의 이름에 해당 변수나 함수의 데이터 타입 정보를 포함하는 표기법
    • 예를 들어, iCount와 같이 i로 정수형 변수임을 표기한다.
  • 카멜 표기법(Camel Case)
    • 변수나 함수의 이름을 대문자로 시작하는 단어와 소문자로 시작하는 단어를 번갈아가며 사용하는 표기법
    • 예를 들어, firstName, lastName와 같이 첫 번째 단어는 소문자로, 이후 단어는 대문자로 표기한다.
  • 파스칼 표기법(Pascal Case)
    • 변수나 함수의 이름을 모든 단어의 첫 글자를 대문자로 표기하는 표기법
    • 예를 들어, FirstName, LastName와 같이 모든 단어의 첫 글자를 대문자로 표기한다.
  • 스네이크 표기법(Snake Case)
    • 변수나 함수의 이름을 밑줄(_)로 구분하는 표기법
    • 예를 들어, first_name, last_name과 같이 단어 사이를 밑줄로 구분한다.

[단답형] 2020년 4회

다음은 C언어 소스 코드이다. 출력 결과를 쓰시오. 

#include <stdio.h>

void main()
{
    char *p = "KOREA";  // 문자열 포인터 p를 "KOREA"로 초기화

    printf("%s\n", p);  // 문자열 포인터 p가 가리키는 문자열 전체를 출력
    printf("%s\n", p + 3);  // 문자열 포인터 p가 가리키는 문자열에서 4번째 문자부터 끝까지 출력
    printf("%c\n", *p);  // 문자열 포인터 p가 가리키는 문자열의 첫 번째 문자를 출력
    printf("%c\n", *(p + 3));  // 문자열 포인터 p가 가리키는 문자열의 네 번째 문자를 출
    printf("%c\n", p + 2);  // 문자열 포인터 p가 가리키는 문자열의 세 번째 문자를 출력
}
  • KOREA
  • EA
  • K
  • E
  • M

[단답형] 2021년 1회

다음은 C언어 소스 코드이다. 출력 결과를 쓰시오.

#include <stdio.h>

struct sugoring // sugoring 구조체를 정의
{
    char name[10]; // 이름을 저장하는 문자열 변수
    int age; // 나이를 저장하는 정수형 변수
};

void main()
{
    struct sugoring s[] = {"Kim", 28, "Lee", 38, "Seo", 50, "Park", 35}; // sugoring 구조체를 배열로 초기화
    struct sugoring *p; // sugoring 구조체를 가리키는 포인터 변수 p를 선언
    p = s; // 포인터 p가 s 배열을 가리킴
    p++; // 포인터 p를 다음 구조체로 이동
    printf("%s\n", p->name); // 포인터 p가 가리키는 구조체의 이름을 출력
    printf("%d\n", p->age); // 포인터 p가 가리키는 구조체의 나이를 출력
}
  • Lee
  • 38

 

[해설]

구조체

  • 서로 다른 데이터 타입을 가진 변수를 하나의 논리적 단위로 묶는 자료형이다.
  • 변수들을 그룹화하고, 해당 그룹에 대한 연산을 쉽게 처리한다.
#include <stdio.h>

// student 구조체를 정의
struct student
{
    char name[20]; // 이름
    int age; // 나이
    double height; // 키
    double weight; // 몸무게
};

int main()
{
    // student 구조체 변수를 선언
    struct student s1 = {"John", 20, 175.0, 65.0};
    
    // 구조체 변수의 멤버에 접근하여 값을 출력
    printf("Name: %s\n", s1.name);
    printf("Age: %d\n", s1.age);
    printf("Height: %.1f\n", s1.height);
    printf("Weight: %.1f\n", s1.weight);
    
    return 0;
}

[단답형] 2021년 2회

다음은 C언어 소스 코드이다. 출력 결과를 쓰시오.

#include <stdio.h>

void main()
{
    int ary[3] = {1}; // 크기가 3인 int형 배열을 선언하고, 첫 번째 요소를 1로 초기화
    int s = 0; // 합을 저장하는 변수를 선언하고, 0으로 초기화
    int i - 0; // int형 변수 i를 선언하고, 0으로 초기화

    ary[1] = *(ary + 0) + 2; // 두 번째 요소에 첫 번째 요소에 2를 더한 값을 대입
    ary[2] = *ary + 3; // 세 번째 요소에 첫 번째 요소에 3을 더한 값을 대입

    for (int i = 0; i < 3; i++) // 배열의 모든 요소를 더함
    {
        s = s + ary[i];
    }

    printf("%d", s); // 합을 출력
}
  • 8

[단답형] 2021년 2회

다음은 C언어 소스 코드이다. 출력 결과를 쓰시오.

#include <stdio.h>

int sugoring(int base, int exp)
{
    int i, result = 1; // 변수 i와 result를 선언하고, result를 1로 초기화
    for (i = 0; i < exp; i++) // exp번 반복
    {
        result *= base; // result에 base를 곱한 값을 저장
    }
     return result; // result 값을 반환
}

void main()
{
    printf("%d", sugoring(2, 10)); // 2의 10승을 계산하여 출력
}
  • 1024

[단답형] 2021년 3회

다음은 C언어 소스 코드이다. 출력 결과를 쓰시오.

#include <stdio.h>

void main()
{
    int *arr[3]; // int형 포인터 배열을 선언
    int a = 12, b = 24, c = 36; // int형 변수 a, b, c를 선언하고 초기값을 설정
    arr[0] = &a; // arr[0]에 변수 a의 주소를 저장
    arr[1] = &b; // arr[1]에 변수 b의 주소를 저장
    arr[2] = &c; // arr[2]에 변수 c의 주소를 저장
    printf("%d\n", *arr[1] + **arr + 1); // arr[1]이 가리키는 변수와 arr[0]이 가리키는 변수의 값을 더하고, 1을 더한 값을 출력
}
  • 37

[단답형] 2021년 3회

다음은 C언어 소스 코드이다. 출력 결과를 쓰시오.

#include <stdio.h>

struct sugoring
{
    char name[20]; // 이름
    int os, db, hab1, hab2; // 과목별 성적과 합계
};

void main()
{
    struct sugoring s[3] = {{"데이터1", 95, 88}, {"데이터2", 84, 91}, {"데이터3", 86, 75}}; // 구조체 배열을 선언하고 초기값을 설정
    struct sugoring *p; // 구조체 포인터를 선언

    p = &s[0]; // 구조체 포인터에 배열의 첫 번째 요소의 주소를 대입
    (p + 1)->hab1 = (p + 1)->os + (p + 2)->db; // 구조체 포인터를 사용하여 배열의 요소에 접근하고, 합계를 계산하여 저장
    (p + 1)->hab2 = (p + 1)->hab1 + p->os + p->db; // 구조체 포인터를 사용하여 배열의 요소에 접근하고, 합계를 계산하여 저장

    printf("%d\n", (p + 1)->hab1 + (p + 1)->hab2); // 구조체 포인터를 사용하여 배열의 요소에 접근하고, 합계를 계산하여 출력
}
  • 501

[단답형] 2022년 1회

다음 소스 코드에 입력 값이 5가 들어왔을 때 출력 값을 쓰시오.

#include <stdio.h>

// 재귀함수를 이용하여 팩토리얼을 계산하는 함수
int sugoring(int a)
{
    if (a <= 1)  // 종료조건: a가 1 이하일 경우 1을 반환
        return 1;
    return a * sugoring(a - 1);  // a * (a-1)의 팩토리얼을 반환
}

void main()
{
    int a;
    scanf("%d", &a);  // 입력받은 정수를 변수 a에 저장
    printf("%d", sugoring(a));  // sugoring 함수를 호출하고 결과값을 출력
}
  • 120

[단답형] 2022년 1회

빈칸에 연산자를 써서 정수를 역순으로 출력하는 프로그램을 완성하시오. 예를 들어 1234의 역순은 4321이다. 단, 1230처럼 0으로 끝나는 정수는 고려하지 않는다.

#include <stdio.h>

void main()
{
    int number = 1234;  // 변환할 10진수 정수
    int div = 10;  // 10진수를 8진수로 변환할 때 나눌 수
    int result = 0;  // 변환된 8진수를 저장할 변수

    while (number ① 0)  // number가 0이 아닐 때까지 반복
    {
        result = result * div;  // 기존에 계산된 결과값에 div를 곱하여 자리수를 늘림
        result = result + number ② div;  // number를 div로 나눈 나머지를 result에 더함
        number = number ③ div;  // number를 div로 나눈 몫을 새로운 number로 저장
    }

    printf("%d", result);  // 변환된 8진수를 출력
}
  • > 또는 != 

[단답형] 2022년 1회

다음은 C언어 소스 코드이다. 출력 결과를 쓰시오.

#include <stdio.h>

// 소수 여부를 판별하는 함수
int isPrime(int number)
{
    int i;
    for (i = 2; i < number; i++)  // 2부터 number-1까지 반복하여 나누어 떨어지는 수가 있는지 검사
    {
        if (number % i == 0)  // 나누어 떨어지는 수가 있으면 소수가 아니므로 0을 반환
            return 0;
    }
    return 1;  // 나누어 떨어지는 수가 없으면 소수이므로 1을 반환
}

void main()
{
    int number = 13195;  // 소인수분해할 숫자
    int max_div = 0;  // 가장 큰 소인수를 저장할 변수
    int i;
    for (i = 2; i < number; i++)  // 2부터 number-1까지 반복하여 소인수를 찾음
    {
        if (isPrime(i) == 1 && number % i == 0)  // i가 소수이고 number가 i로 나누어 떨어지면
            max_div = i;  // i를 가장 큰 소인수로 저장
    }
    printf("%d", max_div);  // 가장 큰 소인수를 출력
    return 0;
}
  • 29

[단답형] 2022년 1회

다음은 C언어 소스 코드이다. 실행 결과를 쓰시오.

#include <stdio.h>

// 구조체 student를 정의
struct student
{
    int n;  // 학생 번호
    int g;  // 학생 성적
};

int main()
{
    struct student st[2];  // student 구조체 타입의 배열 선언
    int i = 0;  // 반복문에서 사용할 변수 i 초기화
    for (i = 0; i < 2; i++)  // 0부터 1까지 반복하여 배열 요소 초기화
    {
        st[i].n = i;  // i를 학생 번호로 사용
        st[i].g = i + 1;  // 학생 성적은 i+1로 설정
    }
    printf("%d", st[0].n + st[1].g);  // 첫 번째 학생 번호와 두 번째 학생 성적을 더한 결과 출력
    return 0;  // 프로그램 종료
}
  • 2

[단답형] 2022년 2회

다음은 C언어 소스 코드이다. 실행 결과를 쓰시오.

#include <stdio.h>

// 문자열의 길이를 계산하는 함수
int len(char *p)
{
    int r = 0;  // 결과값을 저장할 변수 r 초기화
    while (*p != '\0')  // 문자열의 끝까지 반복
    {
        p++;  // 다음 문자를 가리키도록 포인터 증가
        r++;  // 문자열 길이 1 증가
    }
    return r;  // 문자열의 길이 반환
}

int main()
{
    char *p1 = "2022";  // 첫 번째 문자열
    char *p2 = "202207";  // 두 번째 문자열
    printf("%d", len(p1) + len(p2));  // 두 문자열의 길이를 더한 결과를 출력
    return 0;
}
  • 10

[단답형] 2022년 2회

다음은 C언어 소스 코드이다. 실행 결과를 쓰시오.

#include <stdio.h>

void main()
{
    int a[4] = {0, 2, 4, 8};  // 크기가 4인 배열 a 선언하고 초기화
    int b[3];  // 크기가 3인 배열 b 선언
    int *p1;  // int형 포인터 p1 선언
    int i, j;  // 반복문에서 사용할 변수 i, j 선언
    int sum = 0;  // 합계를 저장할 변수 sum 초기화

    for (i = 1; i < 4; i++)  // 1부터 3까지 반복
    {
        p1 = a + i;  // 포인터 p1에 a+i의 주소를 저장
        b[i - 1] = *p1 - a[i - 1];  // b[i-1]에 *(a+i)-a[i-1]의 결과를 저장
        sum = sum + a[i] + b[i - 1];  // sum에 a[i]+b[i-1]의 결과를 누적
    }
    printf("%d", sum);  // sum 출력
}
  • 22

[단답형] 2022년 3회

다음은 C언어 소스 코드이다. 실행 결과를 쓰시오.

#include <stdio.h>

// 폭과 높이, 좌표 i, j를 인자로 받아 필드 내에 존재하는 좌표인지 검사하는 함수
int calc(int w, int h, int j, int i)
{
    if (i >= 0 && i < h && j >= 0 && j < w)  // i, j가 필드의 범위 내에 있으면
        return 1;  // 1 반환
    return 0;  // 아니면 0 반환
}

int main()
{
    int field[4][4] = {{0, 1, 0, 1}, {0, 0, 0, 1}, {1, 1, 1, 0}, {0, 1, 1, 1}};  // 지뢰와 지뢰가 아닌 영역을 나타내는 2차원 배열
    int mines[4][4] = {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}};  // 지뢰 개수를 저장할 2차원 배열

    int w = 4, h = 4;  // 필드의 폭과 높이
    int i, j, k, l;  // 반복문에서 사용할 변수 i, j, k, l

    for (l = 0; l < h; l++)  // 0부터 h-1까지 반복
    {
        for (k = 0; k < w; k++)  // 0부터 w-1까지 반복
        {
            if (field[l][k] == 0)  // 해당 위치가 지뢰가 아닌 경우
                continue;  // 다음 반복으로 건너뜀

            for (i = l - 1; i <= l + 1; i++)  // l-1부터 l+1까지 반복
            {
                for (j = k - 1; j <= k + 1; j++)  // k-1부터 k+1까지 반복
                {
                    if (calc(w, h, j, i) == 1)  // (i, j)가 필드 내에 있는 경우
                    {
                        mines[i][j] += 1;  // 해당 위치의 지뢰 개수를 1 증가시킴
                    }
                }
            }
        }
    }

    for (l = 0; l < h; l++)  // 0부터 h-1까지 반복
    {
        for (k = 0; k < w; k++)  // 0부터 w-1까지 반복
        {
            printf("%d", mines[l][k]);  // 해당 위치의 지뢰 개수를 출력
        }
        printf("\n");  // 줄바꿈
    }

    return 0;  // 프로그램 종료
}
  • 1 1 3 2
  • 3 4 5 3
  • 3 5 6 4
  • 3 5 5 3

[단답형] 2022년 2회

다음은 C언어 소스 코드이다. 실행 결과를 쓰시오.

#include <stdio.h>

void main()
{
    int n, k, s;
    int el = 0;  // 완전수의 개수를 저장할 변수 el 초기화

    for (n = 6; n <= 30; n++)  // 6부터 30까지 반복
    {
        s = 0;  // 약수의 합을 저장할 변수 s 초기화
        k = n / 2;  // n의 반까지만 약수를 구하면 됨

        for (int j = 1; j <= k; j++)  // 1부터 k까지 반복
        {
            if (n % j == 0)  // j가 n의 약수인 경우
            {
                s = s + j;  // s에 j를 더함
            }
        }

        if (s == n)  // s가 n과 같으면 (n이 완전수인 경우)
        {
            el++;  // 완전수의 개수를 1 증가시킴
        }
    }

    printf("%d", el);  // 완전수의 개수를 출력
}
  • 2

 

✅ 16. 자바 Java

💡 자바 기본 구조

  • 클래스(class) 단위로 프로그래밍이 이루어지며, 각 클래스는 자체적으로 변수(variable)와 메서드(method)를 가진다.
  • main() 메서드는 프로그램의 진입점(entry point)으로 사용된다.
  • 클래스와 객체(object)의 개념을 중심으로 코드를 작성하는 객체지향 프로그래밍(OOP) 언어이다.
  • 상속(inheritance)과 다형성(polymorphism) 등을 활용한다.

 

💡 자료형

  • 변수가 저장할 수 있는 값의 종류이다.
  • 기본 자료형(primitive data type)참조 자료형(reference data type)이 있다.
// 기본 자료형 예시
int number = 10; // 정수형 변수
double pi = 3.14; // 실수형 변수
boolean isTrue = true; // 논리형 변수

// 참조 자료형 예시
String text = "Hello, world!"; // 문자열 변수

 

💡 변수 Variable

  • 값을 저장하기 위한 메모리 공간이다.
  • 변수의 타입에 따라 저장할 수 있는 값의 범위와 형태가 결정된다.
// 기본 자료형 변수 선언
int number = 10; // 정수형 변수
double pi = 3.14; // 실수형 변수
boolean isTrue = true; // 논리형 변수

// 참조 자료형 변수 선언
String text = "Hello, world!"; // 문자열 변수

 

💡 배열 Array

  • 동일한 자료형의 값을 여러 개 저장할 수 있는 구조이다.
// 정수형 배열 생성
int[] numbers = new int[5];

// 배열에 값 할당
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
numbers[3] = 40;
numbers[4] = 50;

// 배열 값 출력
for (int i = 0; i < numbers.length; i++) {
    System.out.println(numbers[i]);
}

 

💡 표준입출력 함수

  • System 클래스의 표준입출력 함수를 제공하여, 콘솔 창에서 사용자 입력을 받고 출력한다.
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 사용자 입력 받기
        System.out.print("이름을 입력하세요: ");
        String name = scanner.nextLine();

        // 출력하기
        System.out.println("안녕하세요, " + name + "님!");
    }
}

 

💡 연산자 Operator

  • 값을 연산하거나 비교한다.
int a = 10;
int b = 5;

// 산술 연산자 (+, -, *, /, %)
int result1 = a + b;
int result2 = a - b;
int result3 = a * b;
int result4 = a / b;
int result5 = a % b;

// 비교 연산자 (==, !=, >, <, >=, <=)
boolean isEqual = (a == b);
boolean isNotEqual = (a != b);
boolean isGreater = (a > b);
boolean isLess = (a < b);
boolean isGreaterOrEqual = (a >= b);
boolean isLessOrEqual = (a <= b);

// 논리 연산자 (&&, ||, !)
boolean isTrue1 = (a > 0 && b > 0);
boolean isTrue2 = (a > 0 || b > 0);
boolean isFalse = !(a > 0);

 

💡 반복문 Loop

  • 코드 블록을 여러 번 실행하여 반복 작업을 수행한다.
  • for문, while문, do-while문을 제공한다.
// for문을 활용한 반복문 예시
for (int i = 1; i <= 5; i++) {
    System.out.println("반복문을 실행 중입니다. i의 값은 " + i + "입니다.");
}

// while문을 활용한 반복문 예시
int count = 0;
while (count < 5) {
    System.out.println("반복문을 실행 중입니다. count의 값은 " + count + "입니다.");
    count++;
}

// do-while문을 활용한 반복문 예시
int num = 0;
do {
    System.out.println("반복문을 실행 중입니다. num의 값은 " + num + "입니다.");
    num++;
} while (num < 5);

 

💡 메서드 Method

  • 특정한 기능을 수행하는 코드 블록이다.
  • 메서드를 호출하여 코드의 중복을 줄이고 코드의 가독성을 향상한다.
public class Main {
    public static void main(String[] args) {
        int a = 10;
        int b = 5;

        // 메서드 호출
        int result = add(a, b);

        // 결과 출력
        System.out.println("두 수의 합은 " + result + "입니다.");
    }

    // 메서드 정의
    public static int add(int x, int y) {
        int sum = x + y;
        return sum;
    }
}

 

💡 클래스 Class

  • 변수와 메서드를 포함한 데이터 타입이다.
  • 객체(object)의 설계도이다.
// 클래스 정의
public class Car {
    // 필드(인스턴스 변수)
    String model;
    int year;

    // 메서드
    public void startEngine() {
        System.out.println("시동을 켭니다.");
    }
}

// 객체 생성 및 사용
public class Main {
    public static void main(String[] args) {
        // 객체 생성
        Car myCar = new Car();

        // 필드 값 설정
        myCar.model = "Sonata";
        myCar.year = 2022;

        // 메서드 호출
        myCar.startEngine();
    }
}

 

💡 클래스 상속

  • 이미 정의된 클래스의 필드와 메서드를 다른 클래스에서도 재사용한다. 
  • 기존 클래스의 속성을 유지하면서 새로운 클래스를 만든다.
// 부모 클래스
public class Animal {
    public void eat() {
        System.out.println("먹이를 먹습니다.");
    }
}

// 자식 클래스
public class Dog extends Animal {
    public void bark() {
        System.out.println("멍멍!");
    }
}

// 객체 생성 및 사용
public class Main {
    public static void main(String[] args) {
        // 객체 생성
        Dog myDog = new Dog();

        // 부모 클래스의 메서드 호출
        myDog.eat();

        // 자식 클래스의 메서드 호출
        myDog.bark();
    }
}

 

💡 추상 클래스

  • 인스턴스를 생성할 수 없는 클래스이다.
  • 추상메서드(abstract method)를 포함할 수 있다.
  • 추상클래스를 상속하는 자식 클래스는 반드시 추상메서드를 오버라이딩하여 구현한다.
// 추상클래스 정의
public abstract class Animal {
    // 추상메서드
    public abstract void makeSound();

    // 일반 메서드
    public void eat() {
        System.out.println("먹이를 먹습니다.");
    }
}

// 추상클래스 상속받는 자식 클래스
public class Dog extends Animal {
    // 추상메서드 구현
    public void makeSound() {
        System.out.println("멍멍!");
    }
}

// 객체 생성 및 사용
public class Main {
    public static void main(String[] args) {
        // 추상클래스는 인스턴스를 생성할 수 없음
        // Animal myAnimal = new Animal();

        // 자식 클래스의 객체 생성
        Dog myDog = new Dog();

        // 추상메서드 구현 결과 출력
        myDog.makeSound();

        // 일반 메서드 호출
        myDog.eat();
    }
}

 

💡 인터페이스 Interface

  • 추상메서드와 상수 필드만을 가지는 추상클래스 역할이다.
  • 구현된 메서드를 가지지 않으며, 다른 클래스에서 구현할 메서드를 정의한다.
  • 클래스에서는 implements 키워드를 사용하여 구현한다.
// 인터페이스 정의
public interface Animal {
    // 추상메서드
    public void makeSound();

    // 상수 필드
    public static final int LEGS = 4;
}

// 인터페이스 구현하는 클래스
public class Dog implements Animal {
    // 추상메서드 구현
    public void makeSound() {
        System.out.println("멍멍!");
    }
}

// 객체 생성 및 사용
public class Main {
    public static void main(String[] args) {
        // 인터페이스는 인스턴스를 생성할 수 없음
        // Animal myAnimal = new Animal();

        // 인터페이스를 구현하는 클래스의 객체 생성
        Dog myDog = new Dog();

        // 추상메서드 구현 결과 출력
        myDog.makeSound();

        // 상수 필드 호출
        System.out.println("다리 개수: " + Animal.LEGS);
    }
}

 

💡 스레드 Thread

  • 프로세스 내에서 실행되는 작은 실행 단위이다.
  • 하나의 프로세스 내에서 동시에 여러 작업을 수행할 수 있다.
public class MyThread extends Thread {
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println("스레드 실행 중입니다. i의 값은 " + i + "입니다.");
        }
    }
}

public class Main {
    public static void main(String[] args) {
        // 스레드 객체 생성
        MyThread myThread = new MyThread();

        // 스레드 실행
        myThread.start();

        for (int i = 1; i <= 5; i++) {
            System.out.println("메인 실행 중입니다. i의 값은 " + i + "입니다.");
        }
    }
}

 

💡 컬렉션 Collection

  • 데이터를 저장하고 관리한다.
  • 배열과 유사하지만, 크기를 동적으로 조절할 수 있다.
  • 다양한 메서드를 제공하여 데이터를 추가, 삭제, 검색할 수 있다.
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        // ArrayList 객체 생성
        ArrayList<String> myArrayList = new ArrayList<String>();

        // 데이터 추가
        myArrayList.add("사과");
        myArrayList.add("바나나");
        myArrayList.add("오렌지");

        // 데이터 출력
        System.out.println(myArrayList);

        // 데이터 삭제
        myArrayList.remove("바나나");

        // 데이터 수정
        myArrayList.set(1, "포도");

        // 데이터 검색
        if (myArrayList.contains("사과")) {
            System.out.println("사과가 포함되어 있습니다.");
        } else {
            System.out.println("사과가 포함되어 있지 않습니다.");
        }

        // 데이터 출력
        System.out.println(myArrayList);
    }
}

 

💡 예외 처리 Exception Handling

  • 예외 상황이 발생하였을 때, 프로그램이 비정상 종료되는 것을 방지한다.
public class Main {
    public static void main(String[] args) {
        try {
            int[] myArray = new int[3];
            myArray[3] = 10;
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("배열 인덱스 범위를 벗어났습니다.");
        }
    }
}

 

💡 기출

[단답형] 2020년 1회

다음은 자바 소스 코드이다. 출력 결과를 쓰시오.

public class Main {
    public static void main(String[] args) {
        int i;  // 반복문에서 사용할 변수 i 선언
        int a[] = {0, 1, 2, 3};  // 크기가 4인 배열 a 선언하고 초기화

        for (i = 0; i < 4; i++) {  // 0부터 3까지 반복
            System.out.print(a[i] + " ");  // a[i]의 값을 출력하고 공백을 추가
        }
    }
}
  • 0 1 2 3

[단답형] 2020년 1회

다음은 자바 소스 코드이다. 출력 결과를 쓰시오.

public class Main {
    public static void main(String[] args) {
        int i = 3;  // 변수 i를 3으로 초기화
        int k = 1;  // 변수 k를 1로 초기화

        switch(i) {  // 변수 i를 기준으로 switch 문 실행
            case 0:
            case 1:
            case 2:
            case 3:  // i가 0, 1, 2, 3 중 하나인 경우
                k = 0;  // k에 0을 대입
            case 4:  // i가 4인 경우
                k += 3;  // k에 3을 더함
            case 5:  // i가 5인 경우
                k -= 10;  // k에서 10을 뺌
            default:  // i가 0부터 5까지의 범위에 속하지 않는 경우
                k--;  // k에서 1을 뺌
        }

        System.out.print(k);  // 변수 k의 값을 출력
    }
}
  • -8

[단답형] 2020년 2회

 다음은 자바 코드이다. 다음 밑줄에 들어갈 키워드를 쓰시오.

class Parent {  // 부모 클래스 Parent 선언
    public void show() {  // 메소드 show() 선언
        System.out.println("Parent");  // "Parent" 출력
    }
}

class Child extends Parent {  // 자식 클래스 Child 선언
    public void show() {  // 메소드 show() 오버라이딩
        System.out.println("Child");  // "Child" 출력
    }
}

public class Main {
    public static void main(String[] args) {
        Parent pa = ① Child();  // 부모 클래스의 참조 변수에 자식 클래스의 인스턴스를 생성하여 대입
        pa.show();  // 메소드 show() 호출. 실행 결과 "Child" 출력
    }
}
  • new

[단답형] 2020년 3회

다음은 자바 소스 코드이다. 출력 결과를 쓰시오.

class A {
    private int a;  // 멤버 변수 a 선언

    public A(int a) {  // 생성자 A 선언
        this.a = a;  // a 멤버 변수에 인자로 전달된 값 대입
    }

    public void display() {  // 메소드 display() 선언
        System.out.println("a = " + a);  // a 멤버 변수의 값을 출력
    }
}

class B extends A {  // A 클래스를 상속받은 B 클래스 선언
    public B(int a) {  // 생성자 B 선언
        super(a);  // 상위 클래스의 생성자를 호출하여 인자로 전달된 값을 초기화
        super.display();  // 상위 클래스의 display() 메소드 호출
    }

    public void display() {  // 메소드 display() 오버라이딩
        System.out.println("a = " + a);  // a 멤버 변수의 값을 출력
    }
}

public class Main {
    public static void main(String[] args) {
        B obj = new B(10);  // B 클래스의 인스턴스를 생성하고 초기화
    }
}
  • a = 10

[단답형] 2020년 3회

다음은 자바 소스 코드이다. 출력 결과를 쓰시오.

public class Main {
    public static void main(String[] args) {
        int i = 0;  // 변수 i를 0으로 초기화
        int sum = 0;  // 변수 sum을 0으로 초기화
        while (i < 10) {  // i가 10보다 작은 동안 반복
            i++;  // i를 1씩 증가시킴
            if (i % 2 == 1)  // i가 홀수인 경우 continue문을 실행하고 반복문의 다음 반복으로 이동
                continue;
            sum += i;  // i가 짝수인 경우 sum에 i를 더함
        }
        System.out.print(sum);  // sum 출력
    }
}
  • 30

[단답형] 2020년 3회

다음은 자바 소스 코드이다. 출력 결과를 쓰시오.

// 추상 클래스 Vehicle 선언
abstract class Vehicle {
	String name;  // 문자열 멤버 변수 name 선언

	// 추상 메소드 getName(String val) 선언
	abstract public String getName(String val);

	// getName() 메소드 구현
	public String getName() {
		return "Vehicle name: " + name;
	}

	// setName() 메소드 구현
	public void setName(String val) {
		name = val;
	}
}

// Vehicle 클래스를 상속받은 Car 클래스 선언
class Car extends Vehicle {
	// Car 클래스의 생성자
	public Car(String val) {
		setName(val);  // 상위 클래스의 setName() 메소드를 호출하여 인자로 전달된 값을 name 멤버 변수에 저장
	}

	// getName(String val) 메소드 오버라이딩
	public String getName(String val) {
		return "Car name: " + val;  // "Car name: "와 인자로 전달된 val을 합쳐서 문자열 반환
	}
}

public class Main {
	public static void main(String[] args) {
		Vehicle obj = new Car("Spark");  // Car 클래스의 인스턴스를 생성하고 초기화하여 Vehicle 클래스의 참조 변수에 대입
		System.out.printf(obj.getName());  // obj의 getName() 메소드를 호출하여 반환된 문자열을 출력
	}
}
  • Vehicle name: Spark

[약술형] 2020년 3회

C++에서 생성자란 무엇인지 쓰시오.

  • 해당 클래스의 객체가 생성될 때 자동으로 호출되는 특수한 종류의 메서드이다.

[단답형] 2020년 4회

다음은 n이 10일 때, 10을 이진수로 변환하는 자바 소스 코드이다. ①, ②에 알맞은 값을 적으시오.

public class Main {
	public static void main(String[] args) {
		int a[] = new int[8];  // 크기가 8인 정수형 배열 a 선언
		int i = 0;  // 반복문에서 사용할 변수 i 초기화
		int n = 10;  // 10진수로 표현된 수 n 초기화
		while ( ① ) {  // n이 0보다 큰 동안 반복
			a[i++] = ②;  // 2로 나눈 나머지를 배열 a의 i번째 인덱스에 저장하고 i를 1 증가
			n /= 2;  // n을 2로 나눈 몫으로 갱신
		}
		for (i = 7; i >= 0; i--) {  // i를 7부터 0까지 1씩 감소시키며 반복
			System.out.printf("%d", a[i]);  // 배열 a의 i번째 인덱스를 출력
		}
	}
}
  • n > 0 또는  n >= 1 또는 i < 8 또는 i <= 7
  • n % 2 

[단답형] 2020년 4회

다음은 자바 소스 코드이다. 출력 결과를 보고, ①, ②에 알맞은 값을 적으시오.

1 4 7 10 13
2 5 8 11 14
3 6 9 12 15
public class Main {
	public static void main(String[] args) {
		int a[][] = new int[①][②];  // 3행 5열의 2차원 정수형 배열 a 선언
		for (int i = 0; i < 3; i++) {  // i를 0부터 2까지 1씩 증가시키며 반복
			for (int j = 0; j < 5; j++) {  // j를 0부터 4까지 1씩 증가시키며 반복
				a[i][j] = j * 3 + (i + 1);  // a[i][j]에 j*3+(i+1)의 결과를 저장
			}
			System.out.println();  // 줄바꿈 출력
		}
	}
}
  • 3
  • 5

[단답형] 2020년 4회

다음은 자바 소스 코드이다. 출력 결과를 쓰시오.

class Parent {
	public int compute(int num) {
		if (num <= 1)
			return num;
		return compute(num - 1) + compute(num - 2);
	}
}

class Child extends Parent {
	public int compute(int num) {
		if (num <= 1)
			return num;
		return compute(num - 1) + compute(num - 3);
	}
}

public class Main {
	public static void main(String[] args) {
		Parent obj = new Child();  // Parent 타입의 obj 변수에 Child 객체를 할당
		System.out.print(obj.compute(4));  // obj의 compute 메소드 호출하여 출력
	}
}
  • 1

[단답형] 2021년 1회

다음은 자바 소스 코드이다. 출력 결과를 쓰시오.

public class Main {
    public static void main(String[] args) {
        // 2차원 배열 arr을 선언하고 초기화
        int arr[][] = new int[][] { { 45, 50, 75 }, { 89 } };

        // arr[0]의 길이(3) 출력
        System.out.println(arr[0].length);

        // arr[1]의 길이(1) 출력
        System.out.println(arr[1].length);

        // arr[0][0] 출력
        System.out.println(arr[0][0]);

        // arr[0][1] 출력
        System.out.println(arr[0][1]);

        // arr[1][0] 출력
        System.out.println(arr[1][0]);
    }
}
  • 3
  • 1
  • 45
  • 50
  • 89

[단답형] 2021년 1회

다음은 자바 소스 코드이다. 출력 결과를 쓰시오.

public class Main {
	public static void main(String[] args) {
		int i, j;  // 두 개의 정수형 변수 i와 j를 선언
		for (i = 0, j = 0; i <= 5; i++) {  // i와 j를 0으로 초기화하고 i가 5보다 작거나 같은 동안 반복
			j += i;  // j에 i를 누적하여 더함
			System.out.print(i);  // i 출력
			if (i == 5) {  // i가 5일 경우
				System.out.print(" = ");  // "=" 출력
				System.out.print(j);  // j 출력
			} else {  // i가 5가 아닐 경우
				System.out.print(" + ");  // "+" 출력
			}
		}
	}
}
  • 0 + 1 + 2 + 3 + 4 + 5 = 15

[단답형] 2021년 2회

다음은 자바 소스 코드이다. 출력 결과를 쓰시오.

public class ovr1 {
    public static void main(String[] args) {
        // ovr1 클래스의 객체 생성
        ovr1 a1 = new ovr1();
        // ovr2 클래스의 객체 생성
        ovr2 a2 = new ovr2();
        // a1 객체의 san 메소드와 a2 객체의 san, sun 메소드의 결과를 출력
        System.out.println(a1.san(3, 2) + a2.san(3, 2));
    }
    
    // 두 개의 정수를 더한 값을 반환하는 san 메소드
    int san(int x, int y) {
        return x + y;
    }
}

// ovr1 클래스를 상속받는 ovr2 클래스 정의
class ovr2 extends ovr1 {
    // 두 개의 정수를 뺀 값과 ovr1 클래스의 san 메소드를 더한 값을 반환하는 sun 메소드
    int sun(int x, int y) {
        return x - y + super.san(x, y);
    }
}
  • 11

[단답형] 2021년 3회

다음은 자바 소스 코드이다. 출력 결과를 쓰시오.

// Singleton 클래스 정의
class Singleton {
	// Singleton 클래스의 인스턴스(instance) 변수를 null로 초기화
	private static Singleton instance = null;
	// Singleton 클래스의 count 변수를 0으로 초기화
	private int count = 0;

	// Singleton 클래스의 인스턴스를 반환하는 정적 메소드 get() 정의
	static public Singleton get() {
		// 인스턴스 변수가 null일 경우 인스턴스 생성
		if (instance == null) {
			instance = new Singleton();
		}
		// 인스턴스 반환
		return instance;
	}

	// count 값을 증가시키는 메소드 count() 정의
	public void count() {
		count++;
	}

	// count 값을 반환하는 메소드 getCount() 정의
	public int getCount() {
		return count;
	}
}

// Main 클래스 정의
public class Main {
	public static void main(String[] args) {
		// Singleton 클래스의 인스턴스 생성 및 count 값 증가
		Singleton s1 = Singleton.get();
		s1.count();

		// Singleton 클래스의 인스턴스 생성 및 count 값 증가
		Singleton s2 = Singleton.get();
		s2.count();

		// Singleton 클래스의 인스턴스 생성 및 count 값 증가
		Singleton s3 = Singleton.get();
		s3.count();

		// s1의 getCount() 메소드를 호출하여 count 값 출력
		System.out.print(s1.getCount());
	}
}
  • 3

[단답형] 2021년 2회

다음은 자바 코드이다. 밑줄 친 곳에 들어갈 키워드를 쓰시오.

// Main 클래스 정의
public class Main {
	// main 메소드 정의
	public static void main(String[] args) {
		// check 메소드의 결과를 출력
		System.out.print(Main.check(1));
	}

	// 입력된 정수가 양수인지 음수인지 판별하여 문자열로 반환하는 check 메소드 정의
	① String check(int num) {
		// 삼항 연산자를 사용하여 입력된 정수가 0 이상인 경우 "positive", 그렇지 않은 경우 "negative"를 반환
		return (num >= 0) ? "positive" : "negative";
	}
}
  • static

 

[해설]

  • 객체 생성 없이 메서드를 사용하기 위해서는 static 키워드를 사용하여 정적 메서드(static method)를 정의한다. 
  • static 키워드가 사용된 메서드는 객체 생성 없이 클래스 이름을 통해 바로 호출할 수 있다.

[단답형] 2021년 3회

다음은 자바 소스 코드이다. 출력 결과를 쓰시오.

// Main 클래스 정의
public class Main {
	// main 메소드 정의
	public static void main(String[] args) {
		// 정수 변수 a, b, c, d를 초기화
		int a = 3, b = 4, c = 3, d = 5;
		// 복합 조건식을 사용하여 조건을 판단
		if ((a == 2 | a == c) & !(c > d) & (1 == b ^ c != d)) {
			// 조건이 참인 경우 변수 a를 b + c로 변경
			a = b + c;
			// 다시 복합 조건식을 사용하여 조건을 판단
			if (7 == b ^ c != a) {
				// 조건이 참인 경우 변수 a를 출력
				System.out.println(a);
			} else {
				// 조건이 거짓인 경우 변수 b를 출력
				System.out.println(b);
			}
		} else {
			// 조건이 거짓인 경우 변수 a를 c + d로 변경
			a = c + d;
			// 다시 복합 조건식을 사용하여 조건을 판단
			if (7 == c ^ d != a) {
				// 조건이 참인 경우 변수 a를 출력
				System.out.println(a);
			} else {
				// 조건이 거짓인 경우 변수 d를 출력
				System.out.println(d);
			}
		}
	}
}
  • 7

[단답형] 2022년 1회

다음은 자바 소스 코드이다. 출력 결과를 쓰시오.

// A 클래스 정의
class A {
	// 정수형 인스턴스 변수 a와 b 정의
	int a;
	int b;
}

// Main 클래스 정의
public class Main {
	// A 클래스의 인스턴스를 받아서 a를 10배로 증가시키는 func1 메소드 정의
	static void func1(A m) {
		m.a *= 10;
	}

	// A 클래스의 인스턴스를 받아서 a에 b를 더하는 func2 메소드 정의
	static void func2(A m) {
		m.a += m.b;
	}

	// main 메소드 정의
	public static void main(String[] args) {
		// A 클래스의 인스턴스 생성
		A m = new A();
		// m 인스턴스의 a 값을 100으로 초기화
		m.a = 100;
		// func1 메소드 호출하여 m 인스턴스의 a 값을 1000으로 변경
		func1(m);
		// m 인스턴스의 b 값을 m 인스턴스의 a 값인 1000으로 초기화
		m.b = m.a;
		// func2 메소드 호출하여 m 인스턴스의 a 값을 2000으로 변경
		func2(m);

		// m 인스턴스의 a 값을 출력
		System.out.printf("%d", m.a);
	}
}
  • 2000

[단답형] 2022년 1회

다음은 스레드에 관한 코드이다. 다음 빈칸에 알맞은 한 단어를 쓰시오.

// Car 클래스 정의
class Car implements Runnable {
	// 인스턴스 변수 a 정의
	int a;

	// run 메소드 구현
	public void run() {
		// ...
	}
}

// Main 클래스 정의
public class Main {
	// main 메소드 구현
	public static void main(String[] args) {
		// Car 클래스의 인스턴스를 생성하여 Runnable 인터페이스를 구현하는 쓰레드 생성
		Thread t1 = new Thread(new ①());
		// 쓰레드 시작
		t1.start();
	}
}
  • Car

[단답형] 2022년 1회

다음은 자바 소스 코드이다. 출력 결과를 쓰시오.

// Main 클래스 정의
public class Main {
	// 인스턴스 변수 a 정의
	int a;

	// 생성자 정의
	public Main(int a) {
		this.a = a;
	}

	// func 메소드 정의
	int func() {
		// 지역 변수 b를 1로 초기화
		int b = 1;
		// for 문을 사용하여 a번 반복
		for (int i = 1; i < a; i++) {
			// b 값을 a * i + b로 변경
			b = a * i + b;
		}
		// a + b 값을 반환
		return a + b;
	}

	// main 메소드 정의
	public static void main(String[] args) {
		// Main 클래스의 인스턴스 obj 생성
		Main obj = new Main(3);
		// obj 인스턴스의 a 값을 5로 변경
		obj.a = 5;
		// obj 인스턴스의 func 메소드를 호출하여 b 값을 구함
		int b = obj.func();
		// obj 인스턴스의 a 값과 b 값을 더한 값을 출력
		System.out.print(obj.a + b);
	}
}

[단답형] 2022년 3회

다음은 자바 소스 코드이다. 출력 결과를 쓰시오.

// Main 클래스 정의
public class Main {
	// main 메소드 정의
	public static void main(String[] args) {
		// 정수형 배열 result와 arr 정의
		int result[] = new int[5];
		int arr[] = { 77, 34, 10, 99, 50 };
		// i를 0부터 4까지 반복하는 for 문
		for (int i = 0; i < 5; i++) {
			// result 배열의 i번째 값을 1로 초기화
			result[i] = 1;
			// j를 0부터 4까지 반복하는 for 문
			for (int j = 0; j < 5; j++) {
				// arr 배열의 i번째 값이 arr 배열의 j번째 값보다 작을 경우,
				// result 배열의 i번째 값을 1 증가
				if (arr[i] < arr[j])
					result[i]++;
			}
		}

		// k를 0부터 4까지 반복하는 for 문
		for (int k = 0; k < 5; k++) {
			// result 배열의 k번째 값을 출력
			System.out.print(result[k]);
		}
	}
}
  • 24513

[단답형] 2022년 3회

다음은 자바 소스 코드이다. 출력 결과를 쓰시오.

// Main 클래스 정의
public class Main {
	// MakeArray 메소드 정의
	static int[] MakeArray() {
		// 길이가 4인 정수형 배열 tempArr 정의
		int[] tempArr = new int[4];
		// for 문을 사용하여 tempArr 배열의 모든 요소에 i 값을 저장
		for (int i = 0; i < tempArr.length; i++) {
			tempArr[i] = i;
		}
		// tempArr 배열 반환
		return tempArr;
	}

	// main 메소드 정의
	public static void main(String[] args) {
		// intArr 배열 정의
		int[] intArr;
		// MakeArray 메소드 호출하여 반환값을 intArr 배열에 저장
		intArr = MakeArray();

		// for 문을 사용하여 intArr 배열의 모든 요소를 출력
		for (int i = 0; i < intArr.length; i++) {
			System.out.print(intArr[i]);
		}
	}
}
  • 0123

[단답형] 2022년 3회

다음은 자바 소스 코드이다. 출력 결과를 쓰시오.

// Main 클래스 정의
public class Main {
	// main 메소드 정의
	public static void main(String[] args) {
		// a 변수를 0으로 초기화
		int a = 0;
		// for 문을 사용하여 1부터 998까지 반복
		for (int i = 1; i < 999; i++) {
			// i가 3의 배수이면서 2의 배수가 아닐 경우,
			// a 값을 i로 변경
			if (i % 3 == 0 && i % 2 != 0)
				a = i;
		}
		// a 값을 출력
		System.out.print(a);
	}
}
  • 993

 

 

✅ 17. 파이썬 Python

💡 파이썬 기본 구조

  • 들여 쓰기를 이용하여 코드 블록을 구분하는 인터프리터 언어이다.

 

💡 자료형

  • 정수형, 실수형, 문자열, boolean 등 다양한 자료형이 있다.
# 정수형(integer) 변수
num1 = 10

# 실수형(float) 변수
num2 = 3.14

# 문자열(string) 변수
str1 = "Hello, world!"

# 불리언(boolean) 변수
bool1 = True

# 리스트(list) 변수
list1 = [1, 2, 3, 4, 5]

# 튜플(tuple) 변수
tuple1 = (1, 2, 3, 4, 5)

# 딕셔너리(dictionary) 변수
dict1 = {'name': 'John', 'age': 30}

 

💡 입출력

  • input() 함수를 사용하여 사용자로부터 입력을 받는다.
  • print() 함수를 사용하여 출력한다.
# 사용자로부터 이름을 입력받아 출력하는 예시
name = input("이름을 입력하세요: ")
print("당신의 이름은", name, "입니다.")

# 숫자를 입력받아 계산한 결과를 출력하는 예시
num1 = int(input("첫 번째 숫자를 입력하세요: "))
num2 = int(input("두 번째 숫자를 입력하세요: "))
print(num1, "+", num2, "=", num1 + num2)

 

💡 연산자 Operator

  • 산술 연산자, 비교 연산자, 논리 연산자 등 다양한 연산자가 있다.
# 산술 연산자 예시
num1 = 10
num2 = 3
print(num1 + num2)   # 덧셈
print(num1 - num2)   # 뺄셈
print(num1 * num2)   # 곱셈
print(num1 / num2)   # 나눗셈
print(num1 // num2)  # 정수 나눗셈
print(num1 % num2)   # 나머지 연산
print(num1 ** num2)  # 거듭제곱 연산

# 비교 연산자 예시
a = 10
b = 20
print(a == b)   # 같은지 비교
print(a != b)   # 다른지 비교
print(a > b)    # 큰지 비교
print(a < b)    # 작은지 비교
print(a >= b)   # 크거나 같은지 비교
print(a <= b)   # 작거나 같은지 비교

# 논리 연산자 예시
x = True
y = False
print(x and y)  # 논리 곱(and)
print(x or y)   # 논리 합(or)
print(not x)    # 논리 부정(not)

 

💡 조건문 Conditional 

  •  조건에 따라 프로그램의 흐름을 제어한다.
  • if, elif, else 키워드를 사용하여 조건문을 구성한다.
# if문 예시
num = int(input("숫자를 입력하세요: "))
if num > 0:
    print("입력한 숫자는 양수입니다.")

# if-else문 예시
num = int(input("숫자를 입력하세요: "))
if num > 0:
    print("입력한 숫자는 양수입니다.")
else:
    print("입력한 숫자는 양수가 아닙니다.")

# if-elif-else문 예시
score = int(input("점수를 입력하세요: "))
if score >= 90:
    print("A학점입니다.")
elif score >= 80:
    print("B학점입니다.")
elif score >= 70:
    print("C학점입니다.")
elif score >= 60:
    print("D학점입니다.")
else:
    print("F학점입니다.")

 

💡 반복문 Loop

  • 반복문을 사용하여 코드를 반복해서 실행한다.
  • for문은 주로 시퀀스 자료형을 다룰 때 사용한다.
  • while문은 조건에 따라 반복할 때 사용한다.
# for문 예시
fruits = ['사과', '바나나', '딸기']
for fruit in fruits:
    print(fruit)

# while문 예시
i = 1
while i <= 10:
    print(i)
    i += 1

 

💡 함수

  • def 키워드를 사용하여 함수를 정의하고, 함수의 인자와 반환값을 지정한다.
# 함수 예시
def add_numbers(a, b):
    return a + b

# 함수 호출 예시
result = add_numbers(10, 20)
print(result)

 

💡 예외 처리 Exception Handling

  •  try, except, finally 키워드를 사용한다.
# 예외 처리 예시
try:
    num1 = int(input("첫 번째 숫자를 입력하세요: "))
    num2 = int(input("두 번째 숫자를 입력하세요: "))
    result = num1 / num2
    print("나눗셈 결과:", result)
except ValueError:
    print("정수를 입력해주세요!")
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다!")
finally:
    print("프로그램을 종료합니다.")

 

💡 클래스 Class

  • 데이터와 데이터를 처리하는 메서드를 하나의 단위로 묶는다.
# 클래스 예시
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say_hello(self):
        print("안녕하세요, 저는", self.name, "입니다.")

# 객체 생성 예시
person1 = Person("John", 30)
person2 = Person("Jane", 25)

# 메서드 호출 예시
person1.say_hello()
person2.say_hello()

 

💡 클래스 상속

  • 이미 정의된 클래스의 속성과 메서드를 물려받아 새로운 클래스를 정의한다.
# 클래스 상속 예시
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        raise NotImplementedError("구현되지 않음")

class Dog(Animal):
    def speak(self):
        return "멍멍!"

class Cat(Animal):
    def speak(self):
        return "야옹!"

# 객체 생성 및 메서드 호출 예시
dog = Dog("댕댕이")
cat = Cat("냥냥이")
print(dog.name, ":", dog.speak())
print(cat.name, ":", cat.speak())

 

💡 기출

[단답형] 2020년 2회

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

# a 리스트 정의
a = {'일본', '중국', '한국'}

# a 집합에 '베트남' 요소를 추가
a.add('베트남')
# a 집합에 '중국' 요소를 추가하더라도 중복된 값은 추가되지 않음
a.add('중국')
# a 집합에서 '일본' 요소를 제거
a.remove('일본')
# a 집합에 { '홍콩', '한국', '태국'} 요소를 추가
a.update({'홍콩', '한국', '태국'})

# a 집합을 출력
print(a)
  •  {'홍콩', '태국', '한국', '중국', '베트남'}

[단답형] 2020년 4회

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

# lol 리스트 정의
lol = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]

# lol 리스트의 첫 번째 요소를 출력
print(lol[0])
# lol 리스트의 세 번째 요소의 두 번째 값을 출력
print(lol[2][1])

# for 문을 사용하여 lol 리스트를 반복
for sub in lol:
    # for 문을 사용하여 각 하위 리스트를 반복
    for item in sub:
        # 각 요소를 출력
        print(item, end='')
    # 줄바꿈
    print()
  • [1, 2, 3]
  • 7
  • 123
  • 45
  • 6789

[단답형] 2021년 1회

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

# sugoring 클래스 정의
class sugoring:
    # li 리스트 정의
    li = ["Seoul", "Kyeonggi", "Inchon", "Daejeon", "Daegu", "Pusan"]

# sugoring 클래스의 인스턴스 생성
s = sugoring()

# 빈 문자열 str01을 정의
str01 = ''
# for 문을 사용하여 s.li 리스트를 반복하면서 각 요소의 첫 번째 문자를 str01 문자열에 추가
for i in s.li:
    str01 = str01 + i[0]

# str01 문자열을 출력
print(str01)
  • SKIDDP

[단답형] 2021년 2회

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

# a 변수에 100을 할당
a = 100
# i 변수를 0으로 초기화
i = 0
# result 변수를 0으로 초기화
result = 0

# for 문을 사용하여 i를 1부터 2까지 반복
for i in range(1, 3):
    # a를 i 비트 오른쪽으로 시프트한 결과에 1을 더한 값을 result 변수에 할당
    result = a >> i
    result += 1

# result 값을 출력
print(result)
  • 26

[단답형] 2021년 3회

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

# a 변수에 100을, b 변수에 200을 할당
a, b = 100, 200

# a와 b를 비교하여 같은지 여부를 출력
print(a == b)
  • False

[단답형] 2022년 1회

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

# func 함수 정의
def func(num1, num2=2):
    # 인자로 받은 num1과 num2 값을 출력
    print('a = ', num1, 'b = ', num2)

# func 함수 호출. 인자로 num1에는 20을 전달하고, num2는 기본값으로 2를 가짐
func(20)
  • a = 20 b = 2

[단답형] 2022년 1회

다음은 리스트와 관련된 파이썬 함수이다. 각 항목에 해당하는 함수를 보기에서 골라서 쓰시오. 

  • 리스트 확장, 여러 값을 한 번에 추가할 수 있음 extend()
  • 마지막 또는 지정 요소를 삭제하고 그 값을 반환함 pop()
  • 역순으로 뒤집음 reverse()

 

[해설]

  • append(): 리스트 마지막 요소 뒤에 값을 추가
  • insert(): 리스트의 인덱스 위치에 값을 삽입
  • remove(): 리스트에서 해당하는 값을 제거

[단답형] 2022년 2회

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

# 문자열 a를 정의
a = "REMEMBER NOVEMBER"
# b에 a의 0~2번째 글자와 12~15번째 글자를 이어붙인 문자열을 할당
b = a[:3] + a[12:16]
# c에 "R AND STR" 문자열을 할당
c = "R AND %s" % "STR"
# b와 c를 이어붙인 문자열을 출력
print(b+c)
  • REMEMBER AND STR

[단답형] 2022년 3회

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

# 리스트 l을 정의
l = [1, 2, 3, 4, 5]
# map 함수와 lambda 함수를 사용하여 l의 각 요소에 100을 더한 결과를 리스트로 변환하여 l에 할당
l = list(map(lambda num: num + 100, l))
# l을 출력
print(l)
  • [101, 102, 103, 104, 105]
반응형

'기타 > 정보처리기사' 카테고리의 다른 글

정보처리기사 정처기 | 실기 10 애플리케이션 테스트 관리 | 애플리케이션 테스트 케이스 설계, 애플리케이션 통합 테스트, 애플리케이션 성능 개선 | 단원별 정리  (0) 2023.03.08
정보처리기사 정처기 | 실기 9 소프트웨어 개발 보안 구축 | 소프트웨어 개발 보안 설계, 소프트웨어 개발 보안 구현 | 단원별 정리  (1) 2023.03.08
정보처리기사 정처기 | 실기 8 서버 프로그램 구현 | 개발환경 구축, 공통 모듈 구현, 배치 프로그램 구현 | 단원별 정리  (0) 2023.03.08
정보처리기사 정처기 | 실기 7 SQL 응용 | 데이터베이스 기본, 응용 SQL 작성하기, SQL 활용 및 최적화 | 단원별 정리  (0) 2023.03.08
정보처리기사 정처기 | 실기 5 인터페이스 구현 | 인터페이스 설계 확인, 인터페이스 기능 구현, 인터페이스 구현 검증 | 단원별 정리  (0) 2023.03.08
정보처리기사 정처기 | 실기 4 통합 구현 | 연계 메커니즘 구성, 내외부 연계 모듈 구현 | 단원별 정리  (0) 2023.03.08
정보처리기사 정처기 | 실기 3 데이터 입출력 구현 | 논리 데이터 저장소 확인, 물리 데이터 저장소 설계, 데이터베이스 기초 활용하기 | 단원별 정리  (0) 2023.03.08
정보처리기사 정처기 | 실기 2 화면 설계 | UI 요구사항 확인, UI 설계 | 단원별 정리  (0) 2023.03.08