www.acmicpc.net/problem/10808

 

10808번: 알파벳 개수

단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.

www.acmicpc.net

 

c언어와 c++을 같이 해보았다.

 

이 문제는 쉬웠는데 

확실히 같은 코드인데 

c++의 메모리가 많이 차지하는걸 알 수 있다. 

 

코드 c++ 

#include <iostream>
#include <string>
using namespace std;

int main() {
	string input;
	int answer[26] = { 0 };
	
	cin >> input;
	for(int i = 0; i < input.length(); i++){
		answer[input.at(i) - 'a']+= 1;
	}
	for (int i = 0; i < 26; i++) {
		printf("%d ", answer[i]);
	}
	return 0;
}

코드 c

#include <iostream>
#include <string>
using namespace std;

int main() {
	string input;
	int answer[26] = { 0 };

	cin >> input;
	for(int i = 0; i < input.length(); i++){
		answer[input.at(i) - 'a']+= 1;
	}
	for (int i = 0; i < 26; i++) {
		printf("%d ", answer[i]);
	}
	return 0;
}

'Coding Test > Problem_solving' 카테고리의 다른 글

[백준] 2304 창고 다각형 c++  (0) 2021.04.08
[백준] 1373_2진수 8진수 (c++)  (0) 2021.03.11
[백준] 1874_스택 수열  (0) 2021.02.18
[백준] 9012_괄호  (0) 2021.02.18
[백준]9093_단어 뒤집기  (0) 2021.02.18

<1. 리눅스 일반>

 /etc/password

  • 사용자의 목록 저장
  • 암호화하여 /etc/shadow에 추가 관리함
  • [아이디] : [password] : [UID] : [GID] : user의 추가 정보 : user의 홈 디렉터리 : 로그인 시 사용하는 셸 
    • ex ) luster47 : 1q2w3e4r : 600 : 500 : engineer : /home/luster : /bin/bash

 

ls 

  • 디렉토리 안의 내용 출력
    • -a : 숨겨진 파일, 디렉터리/ '.' : 숨겨진 파일
    • -F : 파일 형태에 따라 관련된 정보 출력
      • * : 실행 가능한 파일 (파일 이름 뒤에)
      • ./ : 디렉터리 (이름 뒤에)
      • @ : Symbolic link 뒤에
    • -l : 파일이나 디렉터리 정보를 한 줄씩 하나씩 길게 보여줌
    • -d : 디렉터리에 대한 정보 출력
    • -t : 시간 순으로 출력
    • -u : 사용된 시간 순으로 출력
    • -i : i-node 번호 출력(파일 or 디렉터리 명 앞에)
    • -r : 알파벳 역순으로 출력
    • -R : 관련 내용 전부 출력
    • -S : 파일 크기가 큰 것부터 출력
    • --color : 파일 종류에 따라 색 보여줌
    • -1 : 한 줄의 한 파일씩 출력
    • -Z : 보안 문맥 출력
  • 출력 결과 : [허가권] [하드 링크 수] [파일 소유자(파일 생성자)] [소유 그룹] [파일 크기] [파일 생성한 시간] [파일명]

<2. 리눅스 운영 및 관리>

1.1_권한 및 그룹 설정

 

 umask 

  • 파일이나 디렉터리 생성 → 허가권 지정
  • 파일 생성 시 : 666
  • 디렉터리 : 777
  • -S : umask 값을 문자로 표기
ex) umask -S
     u=rwx, g=rwx, o=rw
         u : 파일 소유자 접근 권한
         g : 그룹에 속한 사람들에 대한 접근 권한
         o : 다른 사용자들에 대한 접근 권한

cmod

  • 파일이나 디렉터리에 접근할 수 있는 허가권 설정
    • 권한 표시 - r, w, x
    • 사용자 지정 - u, g, o. a
    • 설정 - +, -, =(특정 권한만 지정)

 

1.2_파일 시스템 관리

리눅스의 파일 시스템

  • 파일 시스템 : os가 파티션 or 디스크에 데이터 저장, 읽기, 쓰기, 찾기 위해 구성하는 일련의 체계
  • ext3 (저널링 파일 시스템 기능 있음): 리눅스 커널 2.4부터 사용
  • 저널링 파일 시스템 : 파일 시스템에 변경사항을 반영하기 전에
    • 저널(로그)에 변경사항을 저장하여 추적이 가능하게 만든 파일 시스템
    • 시스템에 충돌 현상 or 전원 문제 발생 -> 데이터 복구 확률 높여줌
    • minix
    • ext
    • ext2
    • ext3 : 저널링 파일 시스템
    • ext4 : 저널링
    • Reiserfs : 저널링
    • XFS : 저널링
    • JFS : 저널링

 /etc/fstab 

  • 파일 시스템에 대한 다양한 정보 담고 있는 파일로 부팅 시에 마운트 할 파티션 정보가 기록되어 있는 파일
  • mount, umount, fsck,, 수행될 때 이 파일이 정보를 참고함.
  • 필드 구성
    • 첫 번째 : 장치명 기록 -> 볼륨 라벨, UUID
    • 두 번째 : 마운트 될 디렉터리 ex) /, /home
    • 세 번째 : 파일 시스템의 유형 ex) ext4, swap, nfs
    • 네 번째 : 마운트 될 때의 옵션
    • 다섯 번째 :  dump 명령을 통한 백업 시 레벨 덤프 주기 결정
      • 0 : dump사용 안 함
      • 1 : 매일 수행
      • 2 : 이틀에 한번 수행
    • 여섯 번째 : fsck 명령의 순서 정함 (부팅 시 파일 시스템 점검)
      • 0 : 부팅 시에 해당 파일 시스템 검사 X

특수 권한 //

  • Set-UID : 해당 파일을 실행하는 동안에는 실행시킨 사용자의 권한이 아닌 해당 파일의 소유자 권한으로 인식함
    • 소유자 권한 부분의 x자리에 s로 표시
    • 실행 권한이 없는 파일에 부여 -> S로 표시
  • Set-GID : 주로 디렉터리에 설정,
    • 이 권한이 설정된 디렉터리에 user가 파일들을 생성 -> 사용자가 속한 그룹에 상관 X, 디렉터리 소유 그룹 권한으로 만들어짐
    • 그룹 소유권 부분 x자리에 s로
    • 실행 권한이 없는 경우 ->  S로 표시
  • Sticky - Bit : 특수 권한 공유 디렉터리
    • /tmp디렉터리에 기본적으로 설정
    • 삭제하는 경우에 본인이 생성한 파일 이외에는 삭제 불가능
    • Group과 other 계층 사용자에게 사용할 수 있지만, 같이 사용 불가
    • other계층에 설정함
    • x자리에 t로 표기, 
    • other계층에 실행 권한이 없는 경우 -> 대문자 T로 

 

fdisk

  • 디스크 파티션을 확인하고 추가/삭제하는 명령
  • 설정 후에는 재부팅해야 함
  • 옵션
    • -I : 현재 디스크 파티션 테이블 출력
    • -s partition : 특정 파티션의 크기 출력, 단위는 block
  • 명령어
    • p : 현재 디스크 정보 출력
    • d : 파티션 삭제
    • n : 파티션 새로 생성
    • t : 파티션 속성 변경
    • w : 변경된 파티션 정보 저장하고 종료함
    • q : 파티션 정보 저장 X 하고 저장
  • ex) fdisk /dev/hi
    • p

 

mkfs(make filesystem)

  • 새로운 파일 시스템 만듦
  • root만 사용 가능
  • 파일 시스템 유형 설정 안 하면 -> ext2로 
  • mkfs [-t fs_type] [option] 장치명
  • 옵션 
    • -t fs_type : 파일 시스템 유형
    • -c : 배드 블록을 체크한 후 파일 시스템 구축
  • ex ) mkfs -t ext3 /dev/asdf
    • /dev/asdf을 리눅스 파일 시스템인 ext3로 만듦

 

 

mount

  • 보조기억장치나 파일 시스템이 다른 디스크를 /의 하위 디렉터리로 연결하여 사용 가능하게 해 줌
  • 옵션
    • -a : /etc/fstab에 명시된 파일을 마운트 할 때 
    • -t : fs_type : 파일 시스템의 유형 지정
      • 지정하지 않으면 : /etc/fstab 참조함
    • -o : 추가적인 설정 적용할 때
  • 유형
    • msdos : FAT - 16 마운트 할 때
    • vfat : FAT - 32
    • ntfs : NT, 2000, XP 이후 버전에서 사용하는 파일 시스템 마운트 할 때
    • ext2, ext3, ext4 
    • xfs
    • iso9660 : CD-ROM, DVD 마운트 할 때
    • smbfs : 네트워크 파일 시스템(삼바 파일 시스템)
    • cifs : 삼바 시스템 확장된 거
    • nfs : 네트워크 파일 시스템 (NFS) , 공유된 영역 마운트 할 때
    • udf : DVD 파일 시스템
  • -o의 항목
    • ro : 읽기 전용
    • rw : 읽/쓰 (기본값)
    • remount : 다시 마운트
    • loop : loop 디바이스로 마운트 할 때, iso(CD-ROM 이미지 파일)를 마운트 해서 사용할 때
    • noatime : 파일이 변경되기 전까지 Access Time(파일 내용 읽을 때 변경됨) 변경 X
    • username = 사용자명 : 사용자 계정 필요할 때
    • password
    • acl : ext3에서 지원하는 접근제어 리스트 사용 가능하도록
  • ex) mount -t ext4 -o ro /dev/sdf /hn
    • ext4인 /dev/sdf를 /hn 디렉터리에 읽기 전용으로 마운트

↓설명 너무 잘 되어 있다. 매일 읽자

jhnyang.tistory.com/12

 

마운트(mount) 뜻, 관련 명령어 & 문제 (fdisk, df, mkfs,디스크마운트)

리눅스 완전 정복 : 리눅스 목차 아마 마운트라는게 윈도우 운영체제에서는 우리가 실감할 일이 없기 때문에 리눅스를 처음 접하시는 분들은 헷갈릴 수 있는 개념이예요. 오늘은 마운트에 대해

jhnyang.tistory.com

 

df (disk free)

  • 현재 마운트 된 디스크의 크기, 사용량, 남아있는 용량,,, 대한 정보 출력
  • 옵션
    • -h : 용량 단위 표시
    • -k : 킬로바이트 단위로 보여줌 (기본)
    • -m : 메가바이트 단위로 보여줌
    • -T : 파일 시스템 유형 보여줌
    • -i : 아이 노드의 사용량 보여줌

 

du (disk usage)

  • 파일 or 디렉터리들이 디스크에서 차지하고 있는 크기 출력
  • 옵션
    • -h : 용량의 단위 표시
    • -s : 파일의 전체 크기 합한 값만 보여줌

nice 

  • 우선순위 변경
  • 프로세스 명으로 우선순위 조정
  • 명령 실행 -> 새로운 프로세스 추가 발생
  • NI 설정할 때 (증감)
  • root만 가능
  • nice [옵션] 프로세스 명
  • 옵션 
    • -n 값, -값/ --adjustment=값
    • 기본값은 10

 

renice

  • 실행 중인 프로세스 우선순위 변경할 때
  • 기존 프로세스 교체하여 조정
  • 설정된 NI 값 바로 설정 됨
  • renice [옵션]  NI  PID
  • 옵션
    • -p : PID 지정
    • -u : 사용자 이름 지정
    • -g : 프로세스 그룹 ID지정

 

 

2. shell
    shell : 커널 - 사용자 간의 다리 역할

    사용자로부터 명령어 받 -> 해석 -> 프로그램 실행

 

셀 확인

  • echo $SHELL
  • 변경 가능한 쉘 확인
    • chsh -l
    • cat /etc/shells
  • 쉘 변경 
    • chsh [쉘 이름]
  • 쉘 관련 파일 및 디렉터리
    • /etc/profile : 시스템 전체의 환경변수, 시작 관련 프로그램 설정
    • /etc/bashrc : 시스템 전체에 적용되는 alias와 함수 설정
    • ~/. bash_profile : 개인 사용자의 환경설정, 시작 프로그램 설정과 관련 있는 파일/ 로그인 시 읽어 들인다.
    • ~/. bashrc : 개인 사용자가 정의한 alias와 함수들이 있는 파일
    • ~/. bash_logout : 개인 사용자가 로그아웃할 때 수행하는 설정 지정
    • /etc/profile.d : 몇몇 응용프로그램이 시작할 때 필요한 스크립트가 위치하는 디렉터리

 

3. 프로세스 관리

  • 프로세스 : 실행 중인 프로그램
  • 시스템 호출 방법
    • fork : 새로운 프로세스를 위해 메모리 할당 받음 -> 복사본 형태의 프로세스 실행
      • 기존 프로세스는 그대로 실행
      • 원래 프로세스와 똑같은 코드 기반으로 실행됨
    • exec : 원래의 프로세스를 새로운 프로세스로 대체
      • 메모리 할당 X
  • 부팅 시작 -> init 프로세스 발생 -> init는 PID 1번 할당
  • 명령어 앞에 exec : 기본 프로세스 교체, 새로운 프로세스 할당됨
  • bg : 백그라운드 프로세스로 전환
  • fg : 포어그라운드 프로세스로 전환
  • 시그널 - 순서 기억
    • 특정 프로세스가 다른 프로세스에게 메시지 보낼 때
    • SIGHUP : 터미널에서 접속이 끊겼을 때 보냄, 재시작할 때 쓰임
    • SIGINT : 키보드로부터 오는 인터럽트 시그널 ( ctrl + c)
    • SIGQUIT : 키보드로 부터 오는 중지 시그널 (ctrl + \)
    • SIGKLL : 프로세스 강종
    • SIGTERM : 정상 종료
    • SIGCONT : 정지된 거 다시 실행시킬 때
    • SIGSTOP : 정지
    • SIGTSTP : 정지 후 다시 실행을 계속하기 위해 대기시킴 (ctrl + z)
  • 데몬
    • 백그라운드로 실행
    • 지속적인 서비스 요청 처리
    • 서버 역할
    • 방법
      • standalone : 부팅 시에 실행, 메모리 상주하면서 클라이언트의 요청 처리
      • inet : 클라이언트의 요청이 들어왔을 때 관련 프로세스 실행 -> 접속 종료 후에 자동으로 프로세스 종료

 

스케줄링과 cron

  • 스케줄링 : 특정한 시간에 특정한 작업 수행, at, cron사용
  • cron 
    • 시스템 운영에 필요한 작업 : /etc/crontab에 등록해서 주기적으로 실행
    • 사용자의 필요에 의한 작업 : crontab명령으로 등록 가능
    • 필드
      • minute
      • hour
      • day of month
      • month
      • day of week : 1월, 2화 ...
      • user-name
      • command

 

ps

  • 동작 중인 프로세스의 상태를 출력해 주는 명령
  • 옵션 계열
    • System V : (dash, -)사용
    • BSD : 대시 사용 X
    • GNU : 두 개의 대시 
  • ps [option]
  • 옵션
    • a : 터미널과 연관된 프로세스 출력
    • u : 프로세스의 소유자를 기준으로 출력
    • x : 터미널에 종속되지 않는 프로세스 출력
    • l : 프로세스의 정보를 길게 보여줌, 우선순위와 관련된 (RPI, NI)값 확인
    • 옵션 항목
      • USER : BSD 계열, 프로세스 소유자의 이름
      • UID : SYSTEM V 계열, 프로세스 소유자의 이름
      • PID : 프로세스의 식별 번호
      • %CPU : CPU 사용 비율 추정치 (BSD)
      • %MEM : 메모리 사용 비율의 추정치 (BSD)
      • VSZ : K단위 또는 페이지 단위의 가상메모리 사용량
      • RSS : 실제 메모리 사용량
      • TTY : 프로세스와 연결된 터미널
      • STAT : 현재 프로세스의 상태 코드
      • START : 프로세스 시작 시간 or 날짜
      • TIME : 총 CPU 사용 시간
      • COMMAND : 프로세스의 실행 명령행
      • STIME : 프로세스가 시작된 시간 혹은 날짜(Sys V)
      • C, CP : 짧은 기간 동안의 CPU사용률
      • F : 프로세스의 플래그 (1:exec 호출 없이 fork된 경우 / 4 : 슈퍼유저 권한 사용자)
      • PPID : 부모 프로세스의 PID
      • PRI : 실제 실행 우선순위
      • NI : nice 우선 순위 번호
    • STAT의 주요 값
      • R ( Runnig) : 실행 중 혹은 실행될 수 있는 상태
      • S ( Sleeping) : 인터럽트에 의한 sleep 상태, 특정 이벤트가 끝나기를 기다리는 상태
      • D ( Disk wait) : 디스크 I/O에 의해 대기하고 있는 상태
      • T ( Traced or stopped) : 정지된 상태
      • W : paging 상태
      • Z ( Zombie) : 작업이 종료되었거나 부모 프로세스로 부터 회수되지 않아 메모리를 차지하고 있는 상태
      • X : 죽어있는 상태, 상태값으로 볼 수 X
      • < : 우선순위가 인위적으로 높아진 상태
      • N (Nice) : 다른 사용자에 의해 인위적으로 우선순위가 낮아진 상태
      • L : 메모리 안에서 페이지가 잠금된 상태
      • s : session Leader
      • I : 멀티 쓰레드 상태
      • + : 포어그라운드 프로세스 그룹
<제품 소프트웨어 패키징>

1. 제품 소프트웨어 패키징

  • 개념
    • 전반적인 내용 포함하는 매뉴얼 작성함
    • 버전관리 수행하는 능력
    • 고객 편의성, 사용자 실행 환경을 우선으로
  • 특성
    • 제품 소프트 웨어 : 사용자 중심
    • 식별 소스 모듈화 -> 상용 제품으로 
    • 고객 편의성 중심
    • 버전 관리 and 릴리즈 노트 사용
    • 범용 환경에서 실행 가능하게
  • 소프트웨어의 모듈 및 패키징
    • 소프트 웨어의 모듈화
      • 모듈 : 소프트웨어 설계 -> 기능 단위로 분해 -> 추상화 -> 재사용 및 공유 가능한 단위
      • 모듈화 : 소프트웨어의 성능 향상 or 시스템의 테스트, 수정, 디버깅을 용이하도록하는 설계 기법
      • 패키징 -> 모듈들을 통해서
    • 제품 소프트웨어의 모듈 및 패키징
      • 모듈의 개념을 정확하게 적용
      • 기능 단위로 패키징 해야 배포 시 성능 향상 가능
      • 모든 것을 모듈 단위로 분류하여 작업 진행
  • 제품 소프트웨어 모듈 빌드 기법
    • 소프트웨어 빌드
      • 소스 코드 파일 → 제품 소프트웨어의 단위로 변환하는 과정이나 결과물
      • 컴파일 과정 핵심
        • 컴파일 : 소스 코드 파일 → 실행 코드
      • 빌드에 따른 결과물에 대한 상세 확인 필요
    • 제품 소프트웨어를 위한 빌드 기법
      • 컴파일을 위한 빌드 도구의 특징 : 사전 확인 필요
      • ex) Ant, Make, Maven, Gradle...

 

2. 사용자 중심의 패키징

  • 사용자 실행 환경의 개념
    • 사용자 실행 환경 우선 고려
    • 사용자 환경 : 운영체제 ~ 실행 환경, 시스템 사양, 고객 사용 방법 -> 상세 분류
  • 사용자 관점에서의 패키징 고려사항
    • 최소 환경 정의
    • 사용자가 이해가능한 인터페에스 제공함
    • 제품 소프트웨어 : HW와 함께 적용되게
    • 패키징 : MAnaged Service형태로 제공 (제3자가 운영 관리해줌)
    • 안정적 배포가 중요
  • 사용자 중심의 패키징 작업 수행 순서
    • 기능식별
      • 기능 수행을 위한 입출력 데이터 : int, char, float,,,
      • 전체적인 기능 정의 및 데이터 흐름 : 흐름 or 출력 절차
      • 함수 단위 및 출력에 대한 상세 정의 : 호출 함수 정의, 출력값 식별
    • 모듈화 - 순서에 맞게 진행함
      • 수행을 위한 기능 단위 및 서비스 분류 
      • 패키징 개념에서의 기능의 공유와 재활용 분류 
      • 모듈 간 결함도와 응집도 식별 
    • 빌드진행
      • 신규 개발 소스 및 컴파일 결과물 준비
      • 정상 기능 단위 및 서비스 분류
      • 빌드 도구 확인 및 정상 수행
      • 컴파일 이외의 도구의 다양한 기능 확인
    • 사용자 환경 분석
      • 최소 사용자 환경 사전 정의
      • 모듈 단위의 여러 가지 기능별 사용자 환경 테스트
    • 패키징 적용 시험
      • 사용자 환경에서의 패키징 적용 시험
      • 사용자 인터페이스 및 시스템상의 편의성 체크
    • 패키징 변경 개선
      • 변경 부분 정리
      • 개선 포인트 도출
      • 재배포 수행

3. 제품 소프트웨어의 패키징 도구

  • 개념
    • 배포를 위한 패키징 시 디지털 콘텐츠의 지적 재산권을 보호, 관리하는 기능
    • 안전한 유통과 배포 보장
    • 암호화 및 보안 기능 고려하여 패키징 함
  • 활용시 고려사항
    • 반드시 암호화 및 보안 기능 고려한다
    • 다양한 다른 기종 연동 고려
    • 사용자 편의성을 위한 복잡성 및 비효율성 문제 고려
    • 제품 SW의 종류에 적합한 암호화 알고리즘 사용
    • 지속적인 배포를 고려
  • 저작권 보호
    • 저작권의 이해
      • 창작물인 저작물에 대한 배타적 독점권 권리
      • 타인의 침해 받지 않을 고유한 권한
    • 저작권 보호 기술의 개념
      • 불법 복제 및 배포 막기 위한 기술적인 방법
      • 복제 허용 -> 사용화 과금 정책 수립 연계됨
      • 종량제 BM SW -> Clearing House 통해 이용시간에 비례한 요금 과금
        • 종량제 BM : 서비스 실제 사용량을 측정하여 요금 측정하는 비지니스 모델
      • 패키징 도구 : 암호화 및 보안 기능 고려함
    • 기술의 필요성
  • 저작권 보호 측면의 패키징 도구 활용
    • 저작권 관리의 흐름도
    • 저작권 관리의 구성요소
      • 콘텐츠 제공자
      • 콘테츠 분배자
      • 패키지
      • 보안 컨테이너
      • DRM 컨트롤러- 이용권한 통제
      • 클리어링 하우스
    • 암호화/보안 기능 중심의 패키징 도구 기술 및 활용
      • 패키징 도구 구성 요소
        • 암호화
        • 키 관리
        • 암호화 파일 생성
        • 식별 기술 - ISBN
        • 저작권 표현
        • 정책 관리
        • 크랙 방지
        • 인증

4. 패키징에서의 릴리즈 노트 

  • 릴리즈 노트의 개념
    •  
  • 릴리즈 노트의 중요성
  •  
  • 릴리즈 노트 작성시 고려사항
  •  

 

 

<개체와 속성>

개체

개체의 정의

  • 레코드에 대응하는 개념
  • 독립적으로 존재

 

개체 타입

  • 개체 스키마
  • 유일한 식별자에 의해 식별 가능해야함
  • 개체 타입에는 속성들이 포함되어 있어야 함
  • 다른 개체 타입과 최소 한 개 이상의 관계가 있어야 함

 

개체 타입을 명명하는 일반적인 기준

  • 실제 업무에서 사용하는 용어 사용
  • 약어 사용하지 않는다
  • 단수 명사 사용
  • 이름은 유일해야함
  • 의미에 따라 이름 부여

개체 어커런스 - 레크드의 값

개체 집합 - 개체 어커런스들의 집합

 

속성
  • 더 이상 분리되지 않은 최소의 데이터 단위
  • 필드
  • 각각의 개체 타입은 속성의 집합으로 설명 가능
  • 하나의 속성 : 하나의 개체 타입에만 존재

 

속성에 따른 분류

  • 기본 속성
    • 모든 속성
    • 일반적, 많이 사용됨
    • 다른 속성에 영향 받아 생성되는거 제외
  • 설계 속성
    • 설계를 하면서 도출되는 속성
    • 새로 만들거나 변형하여 정의하는 속성
  • 파생 속성(Derived Attribute) 
    • 다른 속성으로부터 변형되어 생성되는 속성
    • 계산 된 값

개체 구성 방식에 따른 분류

  • 기본키 속성
    • 개체를 식별할 수 있는 속성
  • 외래키 속성
    • 다른 개체와 관계에 포함된 속성
  • 일반 속성
    • 개체에 포함 됨 || 외래키에 포함 안됨

 

속성 후보 선정 원칙

  • 원시 속성으로 보이는 후보는 제거하지 않는다
    • 다시 재현할 수 없는거
    • 제거하면 정보가 소실됨
  • 소그룹별로 후보군을 만들고, 가장 근접한 개체에 할당
    • 모든 개체가 드러나지 않아서

 

식별자
  • 각각의 개체 구분할 수 있는 결정자
  • 모든 개체 타입에는 반드시 하나 이상의 식별자 있어야함. 

식별자 구분

  • 주 식별자, 보조식별자
    • 주 : 개체 타입의 대표성을 나타내는 유일한 식별자
      • 개체 타입이 하나에 한개
      • 물리테이블 -> 기본키
    • 보조 : 주 식별자 대신, 보조적으로 식별 가능
      • 하나 이상 가능
  • 내부 식별자, 외부식별자
    • 내부 : 스스로 생성되어 존재
    • 외부: 다른 개체 타입과의 관계에 의해 주 식별자의 속성 상속받음,
      • 주 식별자 영역에 포함될 수도, 일반 속성에 포함될 수도
      • 연결자 역활
  • 단일 식별자, 복합 식별자
    • 단일 속성으로 식별 되는 가 
    • 단일 : 주 식별자의 구성이 한 가지 속성
    • 복합 : 두 개의 이상의 속성으로 구성
  • 원조(Artificial) 식별자, 대리(Surrogate)식별자
    • 대체 여부에 따름
    • 대리 : 주 식별자가 복합일 때, 여러개 속성 묶어 하나의 속성으로

 

후보 식별자 조건

  • 각 인스턴스 유일하게 식별 O
  • 나머지 직접 속성할 수 있어야 함
  • 널 X
  • 개념적으로 유일해야함
  • 자주 변경하지 않는 것

 

인조 식별자 조건

  • 최대한 범용적인 값
  • 유리한 값 만들고 싶을 때
  • 편의성, 단순성, 의미의 체계화, 내부적 사용시 

 

 

개체 정의서
  • 개체, 속성, 식별자가 모두 확정 -> 명세서 작성

개체 정의서 포함 항목

  • 개체 타입명
  • 개체 타입 설명
  • 동의어/유의어
  • 개체 타입 구분
  • 관련 속성들
  • 식별자

 

<정보 모델링과 데이터 모델링>

모델링

개념

  • 정보 모델링 : 개체 -> 정보 구조로 표현하는 과정
  • 데이터 모델링 : 정보 구조 -> 논리적인 데이터 구조 (컴퓨터가 이해O)

 

모델링 단계

  • 현실 단계  : 개체 파악, 개체 실체 만들어냄
  • 개념 단계 : 공통점 찾아 추상화 (그림으로 표현?)
  • 논리 단계 : 데이터들의 관계로 구성 (레코드 필드,,)

 

데이터 모델링

구성요소

  • 논리적 구조
  • 연산
    • 데이터 삽입, 삭제, 변경
  • 제약조건
    • 데이터 구조에서 허용할 수 있는 관계를 명세화

 

목적

  • 정보 요구에 정확한 이해
  • 효율적인 의사소통 수단
  • 유지 보수 비용 감소 효과 기대
  • 개발 기초

 

특성

  • 업무 흐름 파악 용이
  • 무결성 보장 O
  • 데이터 공유를 통한 중복 제거, 일관성 있는 정보 제공 O

 

데이터 모델링 절차

데이터 모델링 절차

0. 요구사항

1. 개념(Conceptual) 데이터 모델링

  • 정보 내용 만족
  • 성능 목적 지원
  • E-R모델
  • 논리 데이터 모델의 기초
  • 개념 모델링 2단계
    • 개념 스키마 모델링
      • E-R다이어그램
    • 트랜잭션 모델링
      • 고차원 명세로 기술

2. 논리 데이터 모델링 (분석)

  • 개념
    • DB 개발 과정 첫 단계
    • 가장 핵심
    • 개념 구조 -> 논리적 구조
    • DB 관리자가 사용
    • 관계형 데이터 모델, 계층적 데이터 모델, 네트워크 데이터 모델
    • 정규화하여 모델링함
    • 완전하고 정확하게 표현
    • 특정 DBMS로부터 독립적
  • 논리적 데이터 모델링 3단계
    • 논리적 DB구조로 매핑
    • 트랜잭션 인터페이스 설계
    • 스키마의 평가 및 정제(최적화)
  • 특성
    • 충분히 수집하지 않으면 비용 발생
    • E-R모델 활용
    • HW , SW에 독립적

3. 물리 데이터 모델링 (설계)

  • 개념
    • DB생성을 위한 물리 구조로 변환
    • 레코드 양식, 응답시간, 저장공간 등 설계
  • 3단계
    • 레코드 분석 및 설계
    • 저장 레코드들을 클러스터링 (데이터 하나로 집중 or 분산)
    • 접근 경로 설계
  • 오브젝트 추가
    • 설계용 개체 타입 추가
    • 설계용 속성 추가
  • 성능을 고려한 조정
    • DBMS 고려
    • 개체 타입의 분리 or 통합 검토
    • 반정규화
    • 관계를 해체
  • DBMS에 적합한 성능 조정
    • 인덱스 추가 및 조정
    • 테이블 스페이스 조정
    • 인덱스 스페이스 조정

4. 데이터 베이스 구축 (개발)

  • 개념
    • 설계된 데이터 저장하기 위해 -> DBMS이용하여 DB생성
  • 고려사항
    • 무결성
    • 일관성
    • 회복성
    • 보안성
    • 호율성
    • 확장성

5. 데이터베이스

 

관계

1. 종류

  • 속성 관계
    • 속성과 속성 사이의 관계
    • 개체 내 관계
  • 개체 관계
    • 개체와 개체 사이 관계
    • 개체 간의 관계
  • 종속 관계 (Dependent Relationship)
    • 식별 관계
      • 외래 식별자-> 하위 개체의 주 식별자의 전체 or 일부로 존재
    • 비식별 관계
      • 외래 식별자 -> 하위 개체의 일반 속성으로
  • 중복 관계 (Redundant Relationship)
    • 두 개체 간 두 번 이상의 종속 관계 발생
  • 재귀 관계 (Recursive Relationship)
    • 자기 자신 개체를 다시 참조
  • 배타 관계 (Exclusive Relationship)
    • 데이터 통합
    • AND, OR관계

 

2. 관계의 대응

  • 1:1 
    • 반드시 한 개씩
  • 1:0 or 1:1
    • 한 개 : 한개 이하
  • 1:1 or 1:N
    • 반드시 한 개 : 한 개 이상
  • 1:0 or 1:1 or 1:N
    • 반드시 한 개 : 한 개 이상 or 없
  • 1:N
    • 반드시 한 개 : 반드시 한 개 이상

 

3. M:N 관계의 해소

  • 구현 불가
  • N : 1로 변경해야 함
  • 논리적 완성, 부분집합 식별 능력 제한
  • 정규화 x, 불안정, 문서화 적업 완료 X

 

4. 관계의 특징

  • (1:1 - 1:0 ) or (1:1 - 1:1 )  : 개체 1, 개체 2는 주 식별자가 동일
    • 성능 향상, 데이터 보안 목적

 

 

<E-R다이어 그램 작성>

E-R다이어 그램

1. 배경

2. 개념

  • 개체와 관계로 현실 세계를 표현한 모델
  • 기본 요소 : 개체, 관계, 속성

3. 특징

  • 식별자, 상관관계, 속성 설명해줌
  • 물리적 시스템 환경 고려 X
  • 설계 변경이 거의 발생 X
  • 논리 data 모델 -> 하나의 개체 != 하나의 테이블이나 세그먼트

 

E-R다이어그램 표기법

1. 개체 - 사각형

  • 사물 or 사건
  • 유일한 단어

2. 속성 - 동그라미

  • 개체가 가지고 있는 요소 or 성질
  • 속성명 != 개쳄여
  • 속성 값이 NOT NULL인지, NULL인지 고려

3. 관계 - 마름모

4. E-R 모델 작성 기법

  • 개체들을 정렬하며 배열
  • 좌에서 우, 상에서 하
  • 관계는 사선 X
  • 교차선 X,

 

확장 E-R다이어그램 (ERD)

1. 슈퍼 타입, 서브 타입

  • is-a 관계 가짐
  • 서브 타입 -> 슈퍼 타입이 되어 -> 여러 개 서브 타입 가질 수 O

2. 특수화 (Specialization) ↓

  • 여러 개로 분리
  • 하향식 설계

3. 일반화 (Zeneralization) ↑

  • 공통적인 특성 -> 상위객체로
  • 클래스들 간의 개념적인 포함 관계
  • 상향식 

4. 상속 (inheritance)

  • 하위 클래스는 상위 클래스 모든 것 상속 O
  • 하나의 하위 클래스는 여러개의 상위 클래스 상속 O

5. 집단화(Aggregation)

  • 여러 개체 타입을 묶어 -> 하나의 상위 객체 만들 수 있
  • 중복될 수 있는 개체 -> 단순하게 표현 O
  • 특수화, 일반화 -> 집단화 상속 관계 X

6. 분류화(Classification)

  • 공통적인 성질을 갖는 멤버들 표현
  • 상속 관계X
  • root노드 유형

데이터 베이스

중복 데이터 or 불필요한 데이터 제거  -> 체계적으로 최적화시킨 데이터들의 집합

 

데이터 베이스의 정의

  • 공유데이터(Shared Data) : 데이터들을 공동으로 공유

  • 운영 데이터(Operational Data) : 필요한 모든 데이터 and 데이터들의 관계 집합

  • 통합 데이터(Integrated Data, 종합데이터) : 중복이 최소화된 데이터들의 집합(불필요한거 제거)

  • 저장 데이터(Stored Data) : 저장 매체에 저장

 

데이터 베이스의 특징

  • 계속적인 변화(Continuous Evolution) : 새로운 데이터 삽입 삭제등 데이터 유지하면서 갱신됨

  • 실시간 접근(Real Time Accessibility) : 실시간 처리로 응답 가능

  • 동시 공유(Concurrent Sharing) : 다수 이용자 이용 가능

  • 내용에 의한 참조(Content Reference) : 데이터의 내용 참조하며 접근

  • 뛰어난 데이터 간의 연계성(Superb Data Combination) : 데이터와 데이터 사이의 관련된 정보들로 연결됨

 

 

스키마(테이블 구조)

외부 스키마(개별 사용자 접근)

|

응용인터페이스

|

개념 스키마(DB 전체)

|

저장인터페이스

|

내부 스키마(실제 레코드 형식)

 

 

 

<데이터베이스 관리 시스템(DBMS)>

  • 데이터 저장하고 분석하기 위한 컴퓨터 응용프로그램

  • 주요 기능 : DB관리

  • 데이터 관리의 복잡성 해결 

  • 운영 데이터를 통합 저장 -> 공동으로 사용 가능하도록

 

질의어

  • DDL (Data Definition Language, 데이터 정의어)

    • 테이블 생성, 변경, 제어

    • 응용프로그램 <-> DBMS 간의 인터페이스 제공

    • Table, row, column, 기본키, 외래키

  • DML (Data Manipulation Language, 데이터 조작어)

    • SELECT, UPDATE, INSERT, DELETE

    • 사용자 <-> DBMS 간의 인터페이스 제공

  • DCL (Data Control Language, 데이터 제어어)

    • 데이터 관리자가 사용

 

 

데이터 베이스 관리 시스템의 필수 기능

  • 데이터 정의 기능 (Definition Facility) : 논리적, 물리적 구조 정의

  • 데이터 조작 기능(Manipulation Facility) : 데이터 접근 방법 효율, 명확 / 누구나 쉽게 데이터 검색 변경 삭제 조작 가능해야함

  • 데이터 제어 기능 (Control Facility) :

    • 동시성 제어 (Concurrency Control) : 동시에 데이터 사용 -> 감시 감독

    • 보안과 권한 (Security + Authority) : 외부로부터 데이터 보호, 데이터 사용 권한 구분

  • 무결성 (Integrity)및 제약조건 유지 기능 :  변경돼도 데이터 일관성 유지되어야함

 

특징

  • 무결성

  • 일관성

  • 회복성 : 복구 가능

  • 보안성

  • 효율성 : 최적화

 

DBMS 장단점

  • 장점

    • 중복 최소화

    • 많은 사용자 공유

    • 보안, 무결성 유지, 일관성 유지

  • 단점

    • 구축 자체 어렵, 규모 큼

    • 파괴되면 회복 어렵

    • 독립적이지 않음 : 일부 문제 -> 전체 시스템 영향

    • 구축 비용 많이 듦

 

상용 DBMS 선정 시 고려사항

  • 협업 : 협업 용이한 툴 선정

  • 지원 깊이 : 지원 커퍼리지 파악

  • 시각화 : 그래필 요소 지원 여부 파악

  • 이 기종 DB 지원 : 하나의 툴로 여러 DB 지원

  • 비용 : 총비용 고려

  • 편의 기능 

 

 

<데이터 베이스의 종류>

  • 파일 시스템
  • HDBMS
    • 트리 형태의 구조

      • 구현 용이

    • 접근 속도 빠름

    • 종속적인 구조 -> 데이터 변화 유연하게 대응 어렵

      • 적응성 ↓

    • 한 레코드 -> 여러 개의 레코드 포함

      • 삽입 삭제 어렵

    • 1 : N

      • M : N 관계 표현 X

 

  • NDBMS (Network DBMS)
    • 그래프 형태

      • 계층형 DB보단 유연

      • 레코드로 연결

    • 설계 복잡

      • 데이터 간의 연계성 뛰어남

      • 비용 많이 듦

    • 1:1, 1:N, N:1, N:M

    • 데이터 종속성 문제 해결 X

 

  • RDBMS (Relational DBMS)
    • 테이블 구조

      • 단순한 데이터 구조

      • 2차원 형태인 테이블로 관계 맺는 개념

    • 가장 보편화 됨

    • 데이터 상호 간의 관계 표현

    • 유연성 좋음

      • 유지 관리 용이

    • 시스템 부하가 커서 수행 속도 느림

    • Oracle, SQL Server, MySQL, Maria DB

 

범용 DBMS

  • 관계형 DBMS

    • 테이블 구조(스키마)정의, 테이블 간의 관계 정의 -> 데이터 관리

  • 문서 저장 DBMS

    • 스키마 구조 필요 X

    • 컬럼의 하나 이상의 값 가질 O

    • Client 단에서 후 처리 필요

    • ex) Mongo DB, Amazon Dynamo DB ...

  • 그래프 DBMS

    • 정점과 간선으로 특화

    • 노드 간 관계를 구조화 -> 저장

    • ex) Neo4j

  • 키 값 DBMS

    • 가장 간단한 형태

    • 임베디드 시스템에 적합

    • ex) Redis, Amazon Dynamo DB

 

 

RDBMS 모델링

1. 기본용어

  • 속성 (Attribute) - 애트리뷰트
    • 변수명, 레코드의 필드

    • 유일한 값을 가져야 함

    • 순서 X

  • 도메인(Domain)
    • 실제 원자 값들의 범위

  • 튜플 (Tuple)
    • 실제 입력된 값들의 집합

    • 레코드

  • 릴레이션

    • 표 자체

    • 한개 이상의 속성들 집합

    • 릴레이션 스키마 + 릴레이션 어커런스

  • 릴레이션 스키마
    • 하나 이상의 속성

  • 릴레이션 어커런스
    • 실제 입력된 튜플들의 집합 -> 실시간 변화

  • 차수(Degree)
    • 릴레이션에서 정의된 속성의 개수

    • 레코드 필드 수

  • 카디날리티 (Cardinality, 기수)
    • 튜플의 개수 or 기수

    • 레코드의 수

  • 널 (NULL)
    • 속성 값 비어 있는 거

 

2. 릴레이션 특징

  • 튜플의 유일성

    • 중복 X

  • 튜플의 무순서

  • 속성의 원자성

  • 속성의 무순서 

  • 속성 이름의 유일성

 

3. RDMS의 키

  • 후보키(Candidate Key)
    • 유일성, 최소성

  • 기본키(Primary Key)
    • NULL값 불가

  • 대체키(Alternate Key, 보조키)
    • 후보키 중 기본키 제외한 모든 키

  • 외래키 (Foreign Key)
  • 슈퍼키
    • 튜플을 식별하기 위한 두 개 이상의 속성들의 집합

    • 유일성 O, 최소성 X

  • 무결성(integrity) 제약사항

    • 도메인 무결성
      • 정확성 유지

      • 숫자면 숫자로만, 한글은 한글로만

    • 개체 무결성
      • 기본키는 NULL값 X

      • 튜플 중복 X

    • 참조 무결성
      • 릴레이션은 참조할 수 없는 외래키 가질 X

      • 외래키가 NULL이거나 참조 릴레이션의 기본키값과 동일해야함

      • ex) [학과] 테이블의 '학번'은 [학생]테이블의 '학번'에 있는 값만 넣을 수 있다. 

본 정리 글은 이기적 정보처리기사 필기 책을 참고하여 정리하였습니다. 

book.naver.com/bookdb/book_detail.nhn?bid=17134434

2021 이기적 정보처리기사 필기 기본서

- 기초부터 탄탄히 잡아주는 영진닷컴의 이기적 수험서!영진닷컴이 자랑하는 수험서 브랜드 ‘이기적’ 시리즈는 쉽고 풍부한 내용으로 기초부터 튼튼하게 쌓아주는 합격의 동반자입니다. 기

book.naver.com

 

 

Part 1

소프트웨어 설계

  1.   소프트웨어의 종류 및 개발 방법론
  2. 요구사항 확인
  3. 화면설계
  4. 애플리케이션 설계

 

Part 2

소프트웨어 개발

  1. 데이터 입출력 구현
  2. 통합 구현
  3. 제품 소프트웨어 패키징
  4. 애플리케이션 테스트 관리
  5. 인터페이스 구현

 

Part 3

데이터베이스 구축

  1. 데이터베이스 개요
  2. 논리 데이터베이스 설계
  3. SQL
  4. 물리 데이터베이스 설계
  5. 데이터 전환

 

Part 4

프로그래밍 언어

  1. 프로그래밍 언어 기초
  2. 프로그래밍 언어 활용
  3. 객체지향 기술
  4. 프로그램 개발 환경 구축
  5. 멍령어와 주소 지정
  6. 운영체제

 

Part 5

정보 시스템 구축 관리

  1. 정보 통신의 기초
  2. 데이터 전송 제어
  3. 통신 프로토콜
  4. 소프트웨어 보안 구축
  5. 보안 공격 및 예방
  6. 암호 기술

https://www.acmicpc.net/problem/1874

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net

 

이 문제는 처음에 내가 이해를 잘 못했다.

수열로 뭐 하는거지? 뭐라는거야...

왜 입력이 8개인데 출력이 이렇게 많을까? 이랬는데 이해를 해보니깐 아. 탄성이 나왔다.

 

먼저 설명을 하자면,

백준 예제로 보자. 

입력이 

8 4 3 6 8 7 5 2 1

들어왔다.

처음의 8은 testcase수이다. 

그럼 4부터 봐야한다. 

(4 3 6 8 7 5 2 1) 

 

여기 문제에서 

"1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓으로써,,,"를 잘 봐야한다. 

이 말은 1부터 스택에 넣는데 원하는 수가 보이면 pop한다는 말이다. 

 

 

예시를 들어보자면,

4부터 해보자

 

4가 나오기 위해 push(1), push(2), push(3), push(4)를 해야하고, 4를 pop해서 꺼내와야 문제에서 말하느 수열을 만들 수가 있다. 

 

4를 만들기위해서는  push(1), push(2), push(3), push(4), pop(4)를 해야하기 때문에 ++++-가 되는 것이다. 

 

그렇다면, 이어서 4다음의 수 3을 해보자

 

4가 pop한 상태이기 때문에 스택의 꼭대기 층에는 3이 있다. 

3을 원하기 때문에 여기서는 pop(3)만 해주면 된다. 

 

 

이렇게 해서 이 수열을 만들기 위해서 +,-가 어떻게 들어가는지를 출력하는 것인데,

수열을 못 만들때는 NO를 입력해라고 한다. 

이 말이 무엇이냐면,

 

여기서 간단히 말하자면, 꼭대기에는 4가 있는데 3을 원할때이다. 

스택은 먼저들어오는 수가 나중에 나가는 구조이기 때문에

꼭대기의 수 부터 나가야 밑의 수가 나갈 수 있다.

다시말해 3이 나가려면 4가 꼭 pop해줘야 나갈 수 있다는 말이다. 

그래서 저 상태에서 3을 원한다면, 이것은 만들 수 없는 구조이기 때문에 NO를 출려해야한다. 

 

 

이 문제를 이해하고 나서 알고리즘을 짰다. 

은근 알고리즘은 쉬웠는데, 문제를 이해하기가 좀 당황했었다. 

알고리즘
1. 수를 입력받는다. 
2. 기억하는 숫자(1부터 n까지) ~ 입력 받은 수까지 반복한다. (어차피 원하는 수까지 push를 해야하기 때문)
   2-1) 스택에 저장한다. 
   2-1) +출력한다.
3. stack의 꼭대기의 수가 입력받은 수라면
   3-1) pop을 해준다. 
4. stack의 꼭대기의 수가 입력받은 수가 아니라면,
   4-1) 이것은 수열을 만들 수 없기 때문에 NO를 출력하고 break해준다. 

 

소스 코드

#include <stdio.h>
#include<stdbool.h>
int main() {
	int remember_number = 1;
	int testcase;
	int top = -1;
	int stack[100001];
	int number; 
	char answer[200000];
	int answer_count = 0;
	bool answer_check = true;


	scanf("%d", &testcase);

	for(int T = 0; T<testcase; T++){
		scanf("%d", &number);
		for (; remember_number <= number; remember_number++) {
			stack[++top] = remember_number;
			answer[answer_count++]= '+';
		}

			if (stack[top] == number) {
				--top;
				answer[answer_count++] = '-';
			}
			else {
				printf("NO");
				answer_check = false;
				break;
			}
	}
	if (answer_check) {
		for (int i = 0; i < answer_count; i++) {
			printf("%c\n", answer[i]);
		}
	}
	return 0;
}

'Coding Test > Problem_solving' 카테고리의 다른 글

[백준] 1373_2진수 8진수 (c++)  (0) 2021.03.11
[백준] 10808 알파벳 개수  (0) 2021.03.09
[백준] 9012_괄호  (0) 2021.02.18
[백준]9093_단어 뒤집기  (0) 2021.02.18
[백준] 4948_베르트랑 공준  (0) 2021.02.14

https://www.acmicpc.net/problem/9012

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

처음 시도했을때는 숫자를 세어, 맞는지 틀린지 확인을 했는데,

 

괄호를 생각해보니깐 

여는 괄호가 없는데 닫는 괄호가 나오면 안되는 것이였다. 

그래서 다시 알고리즘 생각해보았다. 

 

 

알고리즘

1. 괄호를 입력 받는다. 
2. 괄호의 수 만큼 반복문을 돌린다. (여기에서 top는 0보다 크거나 같아야함.)
    (top가 0보다 작다는 말은 닫는 괄호가 여는 괄호보다 먼저 나왔다는 말이기 때문에 반복문 종료)
   2-1) 만약 해당 문자가 '('라면 top++
   2-2) 만약 해당 문자가 ')'라면 top--
3. 만약 top가 0이라면 (제대로 된 것) YES출력
4. top가 0이 아니라면(여는 괄호가 많거나, 닫는 괄호가 많거나, 닫히지 않았는데 열렸거나, 열리지 않았는데 닫힌 경우) NO

 

 


 

#include <stdio.h>
#include <string.h>
int main() {

	int testcase;
	char input[51];
	int top = 0;
	scanf("%d", &testcase);
	while (testcase--) {
		top = 0;
		scanf("%s", &input);
		for (int i = 0;top >= 0 && i<strlen(input); i++) {
			if (input[i] == '(')
				top++;
			else if (input[i] == ')')
				top--;
		}
		if (top == 0)
			printf("YES\n");
		else 
			printf("NO\n");

	}
	return 0;
}

 

'Coding Test > Problem_solving' 카테고리의 다른 글

[백준] 10808 알파벳 개수  (0) 2021.03.09
[백준] 1874_스택 수열  (0) 2021.02.18
[백준]9093_단어 뒤집기  (0) 2021.02.18
[백준] 4948_베르트랑 공준  (0) 2021.02.14
[백준]1929_소수 구하기  (0) 2021.02.13

+ Recent posts