정보처리기사

[정보처리기사 실기 기출] 2022년 1회

juble 2024. 10. 11. 21:01

 

01. 서버(Server)에서 구성 가능한 디스크 어레이 구축 방식 중 스트라이핑을 지원하지만 장애 복구 능력이 없기 때문에 데이터 손실의 위험을 감수하더라도 빠른 입출력이 가능하도록 여러 드라이브에 분산 저장하여 고성능을 추구하기 위해 디스크를 병렬로 배치하는 방식의 RAID 레벨을 쓰시오. 

RAID 0

 

* RAID(Redundant Array of Inexpensive Disks)

  • 디스크 시스템의 성능과 신뢰성을 향상시키기 위해 디스크 드라이브의 배열을 구성하여 하나의 유니트로 패키지 함으로써 액세스 속도를 크게 향상시키고 신뢰도를 높이는 기술이다. 
  • 스트라이핑(Striping) : 연속된 데이터를 여러 개의 디스크에 라운드 로빈 방식으로 기록하는 기술로 프로세서가 데이터를 읽어 들일 때 여러 디스크를 활용함으로써 읽기 및 쓰기 속도를 높일 수 있다. 
RAID 0 스트라이핑 사용, 중복 저장과 오류 검출 및 교정이 없는 방식
RAID 1 미러링 사용, 디스크 오류가 발생 시 디스크를 재구성하지 않고 복사된 것을 대체함으로써 데이터를 복구할 수 있음
RAID 2 오류 정정을 위한 해밍코드 사용, 데이터를 각 디스크에 비트 단위로 분산 저장하고 여러 개의 해밍코드 검사 디스크를 사용하는 방식
RAID 3 한 디스크를 패리티 정보 저장용으로 사용, 멀티미디어용 디스크 어레이 구현 방법 중 별도의 패리티 디스크를 사용하는 방식
RAID 4 3과 유사, 각 디스크에 데이터를 블록 단위로 분산 저장하고 오류의 검출 및 정정을 위해 하나의 패리티 검사 디스크를 사용하는 방식
RAID 5 각 디스크에 패리티 정보 포함, 하나의 멤버 디스크가 고장이 발생하여도 무정지 복구가 가능한 방식
RAID 6 두 개의 패리티 정보를 디스크에 분산 저장

 


02. 다음은 손상된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구(Recovery)시키는 과정에 대한 설명이다. 트랜잭션에 대해 검사시점(Checkpoint) 회복 기법이 사용될 때, 시스템이 장애가 발생한 후 수행하는 트랜잭션 관리 연산의 기호를 빈칸에 각각 <보기>에서 골라 쓰시오.

  1. 트랜잭션이 수행되어 COMMIT이 되면 변경된 내용을 데이터베이스에 반영된다. 이때 로그(Log)의 내용을 토대로 재수행하며 변경된 내용으로 데이터베이스에 반영되는 과정
  2. 트랜잭션이 수행되는 도중 오류가 발생하거나 비정상적으로 종료되는 경우 트랜잭션이 시작된 시점으로 되돌아가 수행 연산을 취소하는 과정
① REDO, ② UNDO

 

* 트랜잭션 회복 연산

REDO
(재실행)
트랜잭션이 수행되어 COMMIT이 되면 변경된 내용을 데이터베이스에 반영한다. 이때 로그(Log)의 내용을 토대로 재수행하며 변경된 내용으로 데이터베이스에 반영하는 과정
UNDO
(실행 취소)
트랜잭션이 수행되는 도중 오류가 발생하거나 비정상적으로 종료되는 경우 트랜잭션이 시작된 시점으로 되돌아가 수행 연산을 취소하는 과정 

 

 * 트랜잭션의 특성

  • 원자성(Atomicity)
  • 일관성(Consistency)
  • 독립성, 격리성(Isolation)
  • 영속성(Durability)

 


03. 데이터베이스의 이상현상 중, 삭제 이상에 대해 간략히 서술하시오.

: 한 튜플을 삭제할 때 연쇄 삭제 현상으로 인해 정보 손실 (흥달쌤)
: 튜블 삭제 시 의도와는 상관없이 관련 없는 데이터가 같이 연쇄 삭제(Triggered Deletion)되어 정보의 손실이 발생하는 현상을 의미한다. (이기적)

 

* 이상(Anomaly) 현상 

삽입 이상
(Insertion Anomaly)
어떤 데이터를 삽입하려고 할 때 불필요하고 원하지 않는 데이터도 함께 삽입해야만 되고 그렇지 않으면 삽입되지 않는 현상
삭제 이상
(Deletion Anomaly)
한 튜플을 삭제함으로 인해서 유지해야 하는 정보까지 삭제되는 연쇄 삭제 현상이 일어나게 되어 정보 손실이 발생하는 현상
수정(갱신) 이상
(Update Anomaly)
중복된 튜플 중에 일부 튜플의 속성값만을 갱신시킴으로써 정보의 모순성(Inconsistency)이 생기는 현상

 


04. 무선 라우터에서 WEP 암호화를 대체하기 위해 만들어진 보안 프로토콜로 최적의 보안을 위해서는 AES를 사용하게 되어 있지만, 일부 장치와의 호환성을 위해 사용하는 '임시 키 무결성 프로토콜'을 의미하는 용어를 영문 약어로 쓰시오. 

TKIP (Temporal Key Integrity Protocol)

 

* TKIP (Temporal Key Integrity Protocol) 인증 방식 

  • 임시 키 무결성 프로토콜로 WEP 암호화를 대체하기 위해 만들어진 보안 프로토콜이다.
  • 무선 라우터에서 WPA2 보안을 선택 후 일반적으로 인증 방식을 AES로 설정하여 안전한 암호화 방식을 사용하지만, 일부 장치와의 호환성을 위해 TKIP로 설정하기도 한다.
  • TKIP는 스트림 암호화 방식인 RC4 암호화 알고리즘을 사용한다.

 


05. 터치, 증강현실, 상황 인식 등 사람의 감각 행동 인지를 통하여 원하는 작업을 수행하는 사용자 인터페이스를 의미하는 용어를 쓰시오. 

NUI (Natural User Interface)

* 사용자 인터페이스 

GUI
(Graphical User Interface)
- 윈도우즈나 매킨토시 등의 환경
- 그래픽 화면에서 사용자가 마우스나 키보드로 아이콘이나 메뉴를 선택하여 원하는 작업을 수행
CLI
(Commamd Line Interface)
- 유닉스와 리눅스 등의 환경
- 사용자가 키보드로 명렁어(Command)를 입력해 원하는 작업을 수행
NUI
(Natural User Interface)
 - 터치, 증강현실, 상황 인식 등 사람의 감각 행동 인지를 통하여 작업할 수 있는 환경
MUI
(Menu User Interface)
- 메뉴를 기반으로 작업할 수 있는 환경 

 

* UI 설계 원칙

  • 직관성 : 화면의 버튼, 항목, 입력란 등 누구나 쉽게 이해하고 사용할 수 있어야 한다. 
  • 유효성 : 사용자의 목적을 정확히 달성할 수 있도록 유용하고 효과적이어야 한다. 
  • 학습성 : 사용자가 쉽게 배우고 익힐 수 있어야 한다. 
  • 유연성 : 사용자의 요구를 최대한 수용하면서 오류를 최소화해야 한다. 

 


06. 다음은 소스코드 품질 분석 도구에 대한 설명이다. 설명에 해당하는 분석 도구를 빈칸에 각각 <보기>에서 골라 쓰시오.

( ① ) Analysis
- 원시 코드를 분석하여 잠재적인 오류를 분석하며, 코딩 표준, 런타임 오류 등을 검증한다.
- 결함 예방/발견, 코딩 표준, 코드 복잡도 등을 분석하는 것이 가능하다.
( ② ) Analysis
- 프로그램 수행 중 발생하는 오류의 검출을 통한 오류 검출(Avaianche, Valgrind 등)한다.
- 메모리 릭(Leak), 동기화 오류 등을 분석하는 것이 가능하다.
① static (정적 분석) , ② dynamic (동적 분석)

 

* 소스코드 품질 분석 도구 

  • 소스코드의 코딩 스타일, 코드에 설정된 코딩 표준, 코드의 복잡도, 코드에 존재하는 메모리 누수 현상, 스레드 결함 등을 발견하기 위해 사용하는 분석 도구이다. 
Static Analysis
- 원시 코드를 분석하여 잠재적인 오류를 분석하며, 코딩 표준, 런타임 오류 등을 검증한다.
- 결함 예방/발견, 코딩 표준, 코드 복잡도 등을 분석하는 것이 가능하다.
Dynamic Analysis
- 프로그램 수행 중 발생하는 오류의 검출을 통한 오류 검출(Avaianche, Valgrind 등)한다.
- 메모리 릭(Leak), 동기화 오류 등을 분석하는 것이 가능하다.

 

* 애플리케이션 테스트 유형 분류

  • 프로그램 실행 여부
    • 정적 테스트
    • 동적 테스트
  • 테스트 기법
    • 화이트박스 테스트
    • 블랙박스 테스트
  • 테스트에 대한 시각
    • 검증 테스트
    • 확인 테스트
  • 테스트 목적
    • 회복(Recovery) 테스트 : 고의로 실패를 유도
    • 안전(Security) 테스트 : 보안적인 결함을 점검
    • 강도(Stress) 테스트 : 과부하 테스트 
    • 성능(Perfomance) 테스트 : 응답하는 시간, 처리량, 반응속도 등
    • 구조(Structure) 테스트 : 소스코드의 복잡도를 평가
    • 회귀(Regression) 테스트 : 변경 코드에 대해 새로운 결함 여부  평가 
    • 병행(Parallel) 테스트  : 변경된 시스템과 기존 시스템에 동일한 데이터를 입력 후 비교 
    • A/B 테스트 : 기존 서비스 대비 효과 테스트 
    • 스모크(Smoke) 테스트 : 테스트 환경의 테스트 
  • 테스트 기반
    • 명세 기반 테스트
    • 구조 기반 테스트
    • 경험 기반 테스트 

 


07. 다음 공통으로 설명하는 용어를 쓰시오

- 디자인 패턴 책의 저자인 Erich Gamma와 TDD의 창시자인 Kent Beck가 작성한 인터페이스 구현 검증을 위한 오픈 소스 프레임워크이다.
- JAVA 언어를 지원하는 xUnit이라는 이름의 단위 테스트 프레임워크이다.
- Annotation(@)으로 간결하게 사용 가능하며 하나의 jar파일로 되어 있다.
JUnit

 

* 인터페이스 구현 검증 도구 

  • 인터페이스 구현 검증을 위해서 단위 기능 및 시나리오에 기반한 통합 테스트가 필요하며, 테스트 자동화 도구를 이용하여 단위 및 통합 테스트의 효율성을 높일 수 있다.
  • 종류 : Watir, xUnit(JUnit, NUnit, CppUnit 등), FitNesse, STAF, Selenium

 


08. 다음 보기 중에서 블랙박스 테스트 기법 3가지를 골라 작성하시오.

Equivalence Partitioning, Boundary Value Analysis, Base Path Test, Loop Test, Decision Coverage, Casue-effect Graph
Equivalence Partitioning(동등 분할 기법), Boundadry Value Analysis(경곗값 분석), Cause-effect Graph(원인-효과 그래프 검사)

 

블랙박스 테스팅
(명세 기반)
- 사용자의 요구사항에 대한 명세를 기반으로 테스트 케이스를 작성하고 확인하는 테스트 방식이다.
- Boundary Value Testing, Cause-Effect Fraphing Testing, Equivalence Partitioning Testing
화이트박스 테스팅
(구조 기반)
- 소프트웨어 내부의 구조(논리 흐름)에 따라 테스트 케이스를 작성하고 확인하는 테스트 방식이다.
- Basic Path Testing, Condition Testing, Data Flow Testing, Loop Testing

 

* 블랙박스 테스트

  • 동등 분할 기법 : 입력 자료에 초점을 맞춰 테스트 케이스를 만들어 검사하는 방법
  • 경곗값 분석 : 입력 조건의 경계값을 테스트 케이스로 선정하는 방법
  • 원인-효과 그래프 검사 : 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석한 다음 효용성이 높은 테스트 케이스를 선정하여 검사하는 기법 
  • 오류 예측 검사 : 과거의 경험이나 테스터의 감각으로 테스트 하는 기법
  • 비교 검사 : 여러 버전의 프로그램에 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트하는 기법 

 


09. 다음 공통으로 설명하는 용어를 영문 약어로 쓰시오.

- '정보보호 관리체계'를 의미하는 용어로, 기업(조직)이 각종 위협으로부터 주요 정보 자산을 보호하기 위해 수립, 관리, 운영하는 종합적인 페계의 적합성에 대해 인증을 부여하는 제도이다.
- 기업이 정보보호 활동을 지속적, 체계적으로 수행하기 위해 필요한 보호조치를 체계적으로 구축하였는지를 점검하여 일정 수준 이상의 - - 기업에 인증을 부여하는 제도로 한국인터넷진흥원에서 시행중인 제도이다.
수행 절차는 『정책 수립 및 범위설정 - 경영조직 - 위험관리 - 구현 - 사후관리』순으로 진행된다.
ISMS (정보보호 관리체계 인증)

 

* 정보보호 관리 체계 (ISMS, Infomation Security Management System) 

  • 정보 자산의 기밀성, 무결성, 가용성을 실현하기 위하여 관리적·기술적 수단과 절차 및 과정을 관리, 운용하는 체제이다.
  • 정보통신망의 안전성 확보를 위해 수립하는 기술적, 물리적, 관리적 보호 조치 등 종합적인 정보보호 관리 체계 인증 제도이다.
  • 정보시스템 전체의 정보자산과 보호 대책을 전반적으로 취급하며 인증 심사 기준은 정보보호 관리과정과 정보보호 대책의 두 가지로 구성되어 있다.
  • 정보자산과 보호대책을 전반적으로 취급한다. 
  • 수행 절차 : 정책 수립 및 범위 설정 →  경영 조직 구성   위험 관리   정보보호 대책 구현   사후관리

 

* 애플리케이션 테스트 유형 분류 

  • ISMS (정보보호 관리체계 인증)
  • PIMS (개인정보보호 관리체계)
  • ISMS-P (정보보호 및 개인정보보호 관리체계 인증)
  • ITSEC(유럽)
  • TCSEC(미국)
  • CC(국제 평가 기준)

 


10. 다음은 데이터베이스 키에 대한 설명이다. 빈 칸에 들어갈 내용을 알맞게 쓰시오,

1. 슈퍼키는 ( ① )의 속성을 갖는다.
2. 후보키는 ( ① )과 ( ② )의 속성을 갖는다.
① 유일성 , ② 최소성

 

* 키의 유일성과 최소성 

유일성  하나의 키 값(속성 값)으로 하나의 튜플만을 유일하게 식별할 수 있어야 한다.
최소성  모든 튜플을 유일하게 식별하기 위해서는 꼭 필요한 최소의 속성만으로 구성되어 있어야만 한다.

 


11. 표적형 공격으로 사용자가 평소와 같이 이용하던 합법적인 웹 사이트를 미리 악성 코드로 감염시킨 후, 해당 사이트를 방문하면 악성코드를 감염시켜 공격하는 방법에 해당하는 기호를 <보기>에서 골라 쓰시오.

Watering Hole

 

* 워터링 홀(Watering Hole) 공격 

  • 공격 대상이 방문할 가능성이 있는 합법적인 웹 사이트를 미리 감염시킨 뒤, 잠복하고 있다가 공격 대상이 방문하면 대상의 컴퓨터에 악성코드를 설치하는 공격 방법이다.
  • APT 공격(Advanced Persistent Threat, 지능형 지속 공격)에서 주로 쓰이는 Web Exploit(웹 취약점)을 이용한 공격이다.

 


12. 다음 V모델에서의 테스트 단계에 대한 설명으로 괄호 안에 들어갈 내용을 쓰시오.

① 단위 테스트 , ② 통합 테스트 , ③ 시스템 테스트 , ④ 인수 테스트

 

* V 모델 

  • 폭포수(Waterfall) 모델의 변형으로 산출물보다는 각 개발 단계의 테스트에 중점을 두며, 테스트 활동이 분석 및 설계와 어떻게 관련되어 있는지 보여주는 검증을 강조한 소프트웨어 개발 모델이다.
  • 테스트 수행 순서 : 단위 테스트 → 통합 테스트 → 시스템 테스트 → 인수 테스트

 


13. 다음 SQL 결과에 알맞는 쿼리를 작성하시오.

NAME SCORE
LEE 95
KIM 90
SONG 60
 
SELECT NAME, SCORE FROM 성적 ( ① ) BY ( ② ) (③ )
① ORDER , ② SCORE , ③ DESC

 

* SELECT(검색문)

SELECT (DISTINCT) 속성_이름
FROM 테이블_이름
(WHERE 조건)
(GROUP BY 속성_이름
    (HAVING 그룹조건))
(ORDER BY 속성_이름 (ASC/DESC))
  • DISTINCT : 검색 결과에 중복되는 값이 있는 경우 한 번만 표현하도록 하는 옵션이며, 생략 시 중복된 값이 모두 표시된다. 
  • HAVING 그룹조건 : GROUP BY에 의해 그룹으로 분류를 한 후 조건을 제시할 때 사용된다. 
  • ASC : 오름차순(작은 값에서 큰 값)으로 정렬할 때 사용되는 옵션이다. 기본 옵션이다. 
  • DESC : 내림차순(큰 값에서 작은 값)으로 정렬할 때 사용되는 옵션이다. 

 


14. 다음은 Python 데이터 타입 중 시퀀스(Sequence) 데이터 타입에 해당하는 리스트(List) 타입의 객체의 메소드에 대한 설명이다. 메소드 기능 설명에 해당하는 메소드를 빈칸에 각각 <보기>에서 골라 쓰시오.

 

1. 기존 리스트 객체에 새로운 리스트를 확장하는 기능이다.
2. 기존 리스트의 순서를 역순으로 뒤집는 기능이다.
3. 기존 리스트의 가장 마지막 순서의 요소를 반환하고 삭제하는 기능이다.
① extend , ② pop , ③ reverse

 

* Python 리스트 메소드 

메소드 설명 메소드 설명
x.append(y) 리스트x의 끝에 요소y 추가 x.insert(n, y) 리스트x의 n번째에 요소y 삽입
x.clear() 리스트x의 모든 요소 제거 x.pop() 리스트x의 마지막 요소 반환 삭제
x.copy() 리스트x를 복사 x.remove(y) 리스트x에서 요소y 제거
x.count(y) 리스트x 내의 요소y의 갯수  x.reverse()  리스트x의 요소 역순 뒤집기
 x.extend(y) 리스트x에 리스트y를 추가  x.sort() 리스트x의 요소 정렬
x.index(y) 리스트x 내의 요소y의 위치 반환    
 

15. 다음 파이썬 코드에서 출력되는 결과를 작성하시오.

def func1(num1, num2=2):
  print('a=', num1, 'b=', num2)
func1(20)
 
a=20b=2

 

* Python의 디폴트 매개변수 

  • Python의 함수 호출 시 매개변수 전달과정에서 이미 선언된 함수의 인수가 디폴트 값(기본값)이 설정되어 있으면 전달되는 매개변수의 개수가 부족할 경우 해당 인수는 디폴트 값이 할당된다. 
  • func1(20) 으로 함수 호출이 이루어지면 선언된 인수 a에 20이 전달되고 인수 b는 디폴트 값인 2가 할당이 되어 함수 본문의 명령문을 수행한다. 

 


16. 다음 JAVA 코드 중 밑줄에 들어갈 알맞은 코드를 작성하시오.

class Car implements Runnable{
  int a;
  public void run(){
    System.out.println("func call");
  }
}
public class Main{{
  public static void main(String[] args){
    Thread t1 = new Thread(new ______() );
    t1.start();
  }
}
 
Car

 

  • 해당 프로그램은 Runnable 인터페이스를 구현하여 스레드를 생성하고 있다. 
  • Java의 Thread는 하나의 프로세스 내에서 실행되는 병행 메서드의 단위이다. Java에서 Thread를 생성하는 방법은 Thread 상속 방법과 Runnable 구현 방법 2가지가 있다. 
  • class Car는 Runnable 인터페이스를 구현한다. Runnable 인터페이스는 구현할 메소드가 run() 하나분인 함수형 인터페이스이다. 메소드 run()은 반드시 재정의(오버라이드)되어야 한다. 
  • class Car는 Thread 클래스의 메소드 start()를 통해서 실행 가능하다. Runnable을 구현한 클래스 Car는 Runnable형 인자를 받는 생성자를 통해 별도의 Thread 객체를 생성 후 start() 메소드를 호출해야 한다. 
  • main() 메소드 내에서 Thread 객체 안에 쓰레드를 사용하려는 객체(new Car())를 넣어 객체화한 뒤 사용한다. 

 


17. 다음 JAVA 프로그램의 결과를 쓰시오.

class A{
  int a;
  int b;
}
public class Main{
  static void func1(A m){
    m.a *= 10;
  }
  static void func2(A m){
    m.a += m.b;
  }
}

A m = new A();
m.a = 100;
func1(a);
m.b = m.a;
func2(m);
System.out.println(m.a);
 
2000

 

  • 동일한 패키지 내에서 다른 클래스에 있는 데이터(멤버변수, 필드)를 사용할 경우에는 new를 통해 객체를 생성하고 사용하면 된다. 
  • 해당 프로그램의 class A의 데이터(멤버변수, 필드)의 접근자는 default 이므로 class Main에서 생성한 객체 m이 class Main 내의 func1() 메소드와 func2() 메소드의 호출과정에 매개변수로 참조가 되더라도 점(.)연산자로 직접 접근하여 값을 계산하고 할당 및 출력할 수 있다. 
main() m.a m.b
A m = new A(); 0 0
m.a = 100; 100 0
func1(m); 1000 0
m.b = m.a; 1000 1000
func2(m); 2000 1000

 


18. 다음 C언어 프로그램의 출력결과를 쓰시오. (단, 입력값은 5가 들어왔다고 가정한다.)

#include<stdio.h>
int func(int i){
  if(i<=1) return 1;
  return i*func(i-1);
}
int main(){
  int in;
  scanf("%d", &in);
  printf("%d", func(in));
}
 
120

 

  • 해당 프로그램은 변수 in의 계승(팩토리얼)을 재귀호출 함수 호출을 통해 계산한 후 출력하는 프로그램이다.
  • 변수 in에 5를 입력하였을 경우, 5의 팩토리얼(5!)의 결과 5*4*3*2*1을 계산한 120이 출력된다. 
  • printf("%d", func(in)); 명령문은 func(5)가 반환한 값 120이 최종 출력된다. 

 


19. 다음 C언어 프로그램의 괄호 안에 들어갈 알맞은 답을 작성하시오.

#include<stdio.h>
int main(){
  int num = 1234;
  int div = 10;
  int res = 0;
  while(num ① 0){
    res = res*div;
    res = res + num ② div;
    num = num ③ div;
  }
  printf("%d", res);    // 4321
}
 
① > , ② % , ③ /

 

  • 해당 프로그램은 10진 정수의 자릿수를 역순으로 출력하는 프로그램이다. 
  • 변수 num은 10진 정수로 정수의 자릿수만큼 while문을 통해 반복이 이루어진다. 즉, num은 천의 자리까지 존재하므로 4회 반복이 이루어진다. 10진 정수를 10으로 나눈 나머지 값을 구한 후, 다시 10을 곱한 수를 누적하는 반복을 통해 역수로 나열한 크기의 정수를 생성할 수 있다. 
  • while 반복문 내부에서 각 명령문을 수행했을 경우, 변수 num과 변수 res의 변화는 다음과 같다. 
while(num > 0)  // 참으로 반복 num result
res = result * 10; 1234 0
res = res + (num % 10); 1234 4
num = num / 10; 123 4
 
res = result * 10; 123 40
res = res + (num % 10); 123 43
num = num / 10; 12 43
 
res = result * 10; 12 430
res = res + (num % 10); 12 432
num = num / 10; 1 432
 
res = result * 10; 1 4320
res = res + (num % 10); 1 4321
num = num / 10; 0 4321
  • printf("%d", res); 문에 의해 결과 4321이 최종 출력된다. 

 


20. 다음 C언어 프로그램의 결과를 쓰시오.

int isPrime(int number){
  int i;
  for (i=2; i<number; i++){
    if (number%i == 0) return 0;
  }
  return 1;
}
int main(void){
  int number = 13195, max_div=0, i;
  for (i=2; i<number; i++)
    if (isPrime(i) == 1 && number%i == 0)
      max_div = i;
  printf("%d", max_div);
  return 0;
}
 

 

29 

 

  • 해당 프로그램은 정수 13195의 소인수 중 가장 큰 값을 출력하는 프로그램이다. 
  • isPrime() 함수는 2부터 13194 사이의 정수가 소수인지를 판별하는 함수이다. 해당 정수가 소수이면 1을 반환하고 소수가 아니면 0을 반환한다. 
  • 소수는 1과 자신만을 약수로 갖는 수이고, 소인수 분해는 소수들의 곱셈을 통해 해당 정수를 생성하는 과정이다. 해당 프로그램은 소인수 분해가 가능한 약수를 찾아내는 반복을 통해 가장 큰 소수를 찾아 출력하는 프로그램이다. 
  • main() 함수의 for문은 1과 13195(자기자신)을 제외한 정수 범위를 반복하며 소수를 찾아내고 소인수 분해 여부를 판별한다. 즉, if문의 조건식 isPrime(i) == 1은 i가 소수인지를 판별하여 소수인 경우에 해당하고, 조건식 number%i==0 을 통해 13195의 약수(나누어 떨어지는 수)인지를 판별하여 두 조건이 모두 만족하면 i는 소인수 분해가 가능한 약수이므로 최대값을 갱신하게 된다. 
  • 변수는 max_div 초기값 0에서 5, 6, 13, 29 순으로 최대값을 변경한다. 그 결과 29가 최종 출력된다. 
 

 


해설은 유투브 흥달쌤 강의와, 이기적 실기 기본서를 참고하였습니다 :)

https://youtu.be/YQ5kIuoHam8?si=dJwLDVgmZmjI20W_

 

https://youtu.be/MQUtfu17rPU?si=lMBHz4E7E_fAWdYG

 

728x90
반응형