본문 바로가기
부트로더 전원이 들어오면 OS보다 먼저 실행되는 프로그램 HW/SW를 초기화한다 메모리 관련 커맨드, 시스템 모니터링 커멘드를 지원한다OS 다운로드&로딩 커맨드를 지원한다 2024. 7. 23.
함수 포인터, 구조체 포인터 예제 - 함수 포인터추가하자 -구조체 포인터typedef struct _CMD_TBL { char *cmd; // command name void (*run)(int); // function point. char *usage; // command usage} CMD_TBL;#define CMD_TBL_T1 {"on", ledon, " ledon function"}#define CMD_TBL_T2 {"off", ledoff, " ledoff function"}#define CMD_TBL_T3 {"state", getstate, " button state function"}#define CMD_TBL_END {0, 0, 0}// 구조체 포인터 순회하는 코드CMD_TBL *cptr; for (cptr .. 2024. 7. 23.
임베디드 C • 컴파일 과정- gcc 명령어 옵션• 컴파일 후 실행터미널에서 gcc -S ptrNarray1 ptrNarray1.c gcc -S  v1.s volatileBasic1.c gcc -o ptrNarray1 ptrNarray1.c  ./ptrNarray1  -memcpy를 이용한 데이터 복사int swap(void *dest, void *src, int size){ void* tmp = malloc(size); if (tmp == NULL) return -1; memcpy(tmp,dest,size); memcpy(dest,src,size); memcpy(src,tmp,size); free(tmp);} - 비트 연산자 계산기bitSet 해당 위치 비트를 1로 만들기bitReset 해당 위치 비트를 0으로 만.. 2024. 7. 22.
리눅스 C 환경설정 • 윈도우 리눅스 환경 설정wsl --install -d ubuntusudo apt-get updatesudo apt install wsl - OpenSSH 서버 설치 후 환경 확인Telnet을 통해서도 원격으로 리눅스에 접근할 수 있지만 보안 문제때문에 ssh로 접근하는 방법을 사용한다 sudo apt install openssh-serversudo systemctl status sshd  vscode 설치 후remote development 확장 설치 wsl 터미널에서 ip addr 명령어 입력 후 inet 다음에 있는 ipv4 주소 복사vscode 좌하단 remote development 클릭하고 connect to host 입력 후 리눅스계정@ipv4주소 입력hoshi03@172.27.10.53-.. 2024. 7. 22.
스래싱 & 프레임 할당 • 스래싱 프로세스가 사용 가능한 프레임이 수가 적으면 페이지 폴트가 자주 발생할 수 밖에 없다프레임이 부족하면 페이지 폴트가 자주 발생하면서 CPU의 이용율이 떨어지고, 성능이 저해되게 된다프로세스 실행 시간보다 페이징에 더 많은 시간을 소모해서 성능이 저하되는 문제를 스래싱이라고 한다 프로세스가 필요한 최소한의 프레임 수를 보장해주지 않는게 스래싱의 근본적인 원인이다10개의 프레임이 필요한 프로세스가 5개의 프레임만 이용할 수 있으면 계속 페이지 폴트가 일어나면서스래싱이 발생할 위험이 높아진다OS는 각 프로세스를 무리없이 실행하기 위한 최소한의 프레임 수를 파악하고 할당해줘야 한다 • 정적 프레임 할당 방식 :실행 과정을 고려하지 않고 프로세스와 메모리 크기를 보고 할당하는 방식 - 균등 할당각 프로.. 2024. 7. 21.
요구 페이징 & 페이지 교체 알고리즘 • 요구 페이징프로세스를 메모리에 적재할때 모든 페이지가 아닌, 필요한 페이지만 메모리에 적재하는 방식 1. CPU가 특정 페이지 접근 명령어 실행2. 해당 페이지가 메모리에 있으면 CPU는 페이지가 적재된 프레임에 접근3. 해당 페이지가 메모리에 없으면 페이지 폴트4. 페이지 폴트 처리 루틴이 해당 페이지를 메모리에 적재하고 유효비트를 1으로 설정5. 반복 - 순수 요구 페이징메모리에 아무 페이지도 없는 경우부터 실행할 수도 있다그렇게 하면 연속적으로 페이지 폴트를 발생시키면서 페이지를 메모리에 적재하고 어느정도 적재가 된 후 부터는페이지 폴트 발생 빈도가 떨어진다이렇게 아무 페이지도 없을 때부터 요구 페이징을 하는 경우를 순수 요구 페이징이라고 한다 요구 페이징 시스템의 안정적인 작동을 위해서는 페이.. 2024. 7. 21.
백준 1874 : 스택 수열 (스택) 문제스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다.1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지를 알아낼 수 있다. 이를 계산하는 프로그램을 작성하라.입력첫 줄에 n (1 ≤ n ≤ 100,000)이 주어진다. .. 2024. 7. 21.
백준 1406 에디터 : 연결 리스트 문제한 줄로 된 간단한 에디터를 구현하려고 한다. 이 편집기는 영어 소문자만을 기록할 수 있는 편집기로, 최대 600,000글자까지 입력할 수 있다.이 편집기에는 '커서'라는 것이 있는데, 커서는 문장의 맨 앞(첫 번째 문자의 왼쪽), 문장의 맨 뒤(마지막 문자의 오른쪽), 또는 문장 중간 임의의 곳(모든 연속된 두 문자 사이)에 위치할 수 있다. 즉 길이가 L인 문자열이 현재 편집기에 입력되어 있으면, 커서가 위치할 수 있는 곳은 L+1가지 경우가 있다.이 편집기가 지원하는 명령어는 다음과 같다.LDBP $커서를 왼쪽으로 한 칸 옮김 (커서가 문장의 맨 앞이면 무시됨)커서를 오른쪽으로 한 칸 옮김 (커서가 문장의 맨 뒤이면 무시됨)커서 왼쪽에 있는 문자를 삭제함 (커서가 문장의 맨 앞이면 무시됨)삭제로.. 2024. 7. 19.
volatile 지시자 임베디드 환경에서 컴파일러가 특정 변수를 최적화를 수행하지 않게 만드는 키워드HW 레지스터 접근이나 멀티쓰레드 환경, 신호 처리 등의 환경에서 사용한다 언어 기초를 떼고 더 깊게 들어가면서 강사님이 자세하게 설명해준다고 하니 그때 다시 정리하자 2024. 7. 19.
1주차 C 전처리, 매크로, 조건부 컴파일 • 전처리소스 파일 -> 전처리 -> 컴파일 -> 링크 단계를 통해 소스파일을 실행파일로 변환한다 -전처리 hello.c -> hello.i소스파일이 전처리 단계를 통해 #으로 시작하는 #include나 #define 등의헤더 파일이나 상수, 매크로등을 처리한다#ifdef, #endif 등의 지시문도 전처리 과정에서 처리되어 코드블록의 포함 여부를 결정한다전처리 단계가 끝나면, 소스 코드의 텍스트가 전처리문에 따라 수정된 상태가 된다 -컴파일hello.i -> hello.s나 hello.obj컴파일러가 고수준 언어를 저수준으로 변환구문 분석, 어셈블리 코드 생성, 최적화등의 작업을 진행해소스 프로그램을 목적 프로그램으로 변환한다 -어셈블hello.s -> hello.o어셈블러가 어셈블리어를 기계어로 변환.. 2024. 7. 19.
1주차 C 공용체,열거형,파일 입출력 • 구조체 비트 필드 메모리를 몇 비트나 사용할지 정의하는 방법b1은 4비트, b2는 2비트만 사용하게 정의했다#define _CRT_SECURE_NO_WARNINGS #include #include #include // strlen 함수 사용을 위해 추가#include "myList.h"struct bit { unsigned char b1 : 4; unsigned char b2 : 2;} ch;int main() { ch.b1 = 0x0E; ch.b2 = 0x00; printf("%d\n", sizeof(ch)); printf("%u, %u\n", ch.b1, ch.b2);} • 공용체 공용체는 멤버간에 메모리를 공유한다다른 멤버가 메모리를 사용하면 기존 멤버가 사용하던 값이 초기화된다 아래의 .. 2024. 7. 19.
1주차 C 기초부터 이중연결리스트까지 배열 선언할때 크기+1로 널문자를 포함해주기 - 안하면 어디서 끝나는지를 모른다 • 헤더파일 분할 vs환경에서 헤더 파일 분할에 헤더파일을 생성한다정수를 인자로 받아서 팩토리얼을 구해주는 함수를 fac.h에 생성한다 -fac.h#include int factorial(int input) { if (input == 1) return 1; return input * factorial(input - 1);} main 함수에서 사용자가 만든 헤더를 #include "fac.h" 형태로 삽입해서 사용한다#define _CRT_SECURE_NO_WARNINGS #include #include "fac.h"int main(void) { int a; scanf("%d", &a); printf("%d", factoria.. 2024. 7. 18.
메모리 할당 & 페이징 • 연속 메모리 할당프로세스 A B C D가 있을때메모리 안에서 연속적으로 A의 크기만큼 메모리 할당후 B의 크기.. C.. D.. 형태로 메모리를 할당하는 걸연속 메모리 할당이라고 한다이렇게 연속적으로 메모리를 할당할때 고려할 점과 잠재적인 문제점을 알아보면.. • 스와핑 메모리에 적재된 프로세스 중 현재 실행되지 않는 프로세스를 보조 기억 장치로 보내고, 이렇게 얻은 공간에다른 프로세스를 적재해서 실행하는 방법 쫒겨난 프로세스가 가는 보조기억장치의 영역을 스왑 영역 이라고 하고 스왑 영역으로 가는 걸 스왑 아웃,스왑 영역에서 다시 메모리로 옮겨오는 것을 스왑 인 이라고 한다 스와핑을 통해 실제 메모리 사이즈보다 요구하는 메모리가 큰 경우에도 프로세스들을 동시에 실행할 수 있다 • 메모리 할당 프로세스.. 2024. 7. 10.
교착상태 • 식사하는 철학자 문제 다섯 명의 철학자가 하나의 원탁에 앉아 식사를 한다. 각각의 철학자들 사이에는 포크가 하나씩 있고, 앞에는 접시가 있다. 접시 안에 든 요리는 포크를 두개 사용하여 먹어야만 하는 스파게티 이다. 그리고 각각의 철학자는 다른 철학자에게 말을 할 수 없으며, 번갈아가며 각자 식사하거나 생각하는 것만 가능하다. 따라서 식사를 하기 위해서는 왼쪽과 오른쪽의 인접한 철학자가 모두 식사를 하지 않고 생각하고 있어야만 한다. 또한 식사를 마치고 나면, 왼손과 오른손에 든 포크를 다른 철학자가 쓸 수 있도록 내려놓아야 한다. 이 때, 어떤 철학자도 굶지 않고 식사할 수 있도록 하는 방법은 무엇인가? 모든 철학자가 동시에 왼쪽 포크부터 집어들면 어떤 철학자도 식사를 하지 못하고 대기하는 상황이 .. 2024. 7. 10.
프로세스 동기화 동기화 : 프로세스들의 실행 순서를 맞추기, 실행 순서를 제어하기 위한 동기화와 상호 배제를 위한 동기화가 있다 • 실행 순서 제어를 위한 동기화READER, WRITER가 있을때 READER는 WRITER가 값을 갱신한 후에 읽어와야 올바른 값을 가져올 수 있다 • 상호 배제를 위한 동기화 - 생산자와 소비자 문제#include #include #include void produce();void consume();//std::queue q;int sum = 0;int main() { std::cout  상호 배제가 이루어지지 않은 환경에서는 프로세스가 동기화되지 않아 둘다 실행한 후에 초기 값이 유지되지 않는다공유 자원에 접근하는 임계구역에 여러개의 프로세스가 진입하고자 하면 한 프로세스가 작업하.. 2024. 7. 9.
CPU 스케줄링 • CPU 스케줄링 비디오 재생, 디스크 백업 작업 - 입출력 집중 프로세스연산, 컴파일, 그래픽 처리 - CPU 집중 프로세스 입출력 집중 프로세스는 실행보다 IO 상태가 더 길고 CPU 집중 프로세서는 실행 상태가 더 길다  입출력 집중 프로세스를 먼저 실행해서 입출력장치를 작동시키고 CPU집중 프로세스에 CPU를 할당하는게 효율적이다이렇게 프로세스가 상황에 맞게 CPU를 배분하기 위해 스케줄링을 한다 프로세스에 PCB에 우선순위를 명시하고 우선순위 기준으로 먼저 처리할 프로세스를 결정하게 된다 • 스케줄링 큐메모리에 적재되거나 IO하거나 CPU를 쓰려는 프로세스들을 줄세워서 스케줄링 큐로 관리하는 방법 CPU를 이용하려는 준비 큐와입출력장치를 이용하려는 대기 프로세스들이 있는 대기 큐가 있다 • 선.. 2024. 7. 9.
스레드 • 스레드 : 프로세스를 구성하는 실행의 흐름 단위난해한 설명 같지만 이거만한게 없다.. 전통적인 관점에서는 하나의 프로세스가 하나의 작업을 처리하는 단일 스레드 프로세스스레드 개념을 도입해서 한 프로세스가 여러가지 일을 동시에 처리하는 멀티 스레드 프로세스가 된다 스레드는 프로세스 내에서 각각 ID, PC, 레지스터, 스택을 가지고 실행된다프로세스 내의 스레드들은 PC 포함 레지스터, 스택을 유지하고 프로세서 자원을 공유하면서 실행된다 프로세스와 스레드를 구분하지 않고 둘다 실행의 문맥인 태스크로 보는 운영체제도 있다  • 멀티 프로세스와 멀티 스레드 같은 작업을 여러번 수행하려고 할때 FORK를 여러번 하는 것과 스레드를 여러개 만들어서 실행하는 방법이 있음 결과물은 같아도 FORK를 통해 프로세스를.. 2024. 7. 9.
프로세스 프로세스 : 보조기억장치의 프로그램을 메모리에 적재해서 실행한 것포그래운드 프로세스, 백그라운드 프로세스백그라운드 프로세스 중 사용자와 상호작용 없이 주어진 작업만 수행하는 것을 데몬이나 서비스라고 부른다작업관리자의 서비스 탭에서 확인 가능 • PCBPCB를 이용해서 번갈아가면서 수행되는 프로세스의 실행 순서를 관리하고 자원을 배분 - PCB의 구성PID레지스터 값프로세스 상태CPU 스케줄링 정보메모리 관리 정보파일, IO목록 • 컨텍스트 스위칭프로세스 A에서 프로세스 B로 실행 순서가 넘어갈때 A의 지금까지의 정보를 PCB에 백업하고실행할 프로세스 B의 PCB로 부터 정보를 가져온다 • 프로세스의 메모리 영역 크게 4가지 영역으로 나뉘어서 저장된다코드, 데이터, 힙, 스택 영역이 있다- 코드 영역실행되.. 2024. 7. 4.
운영체제 시작하기 운영체제는 프로그램에 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 프로그램커널 영역에서 동작하면서 시스템 자원을 관리한다 응용 프로그램이 자원에 접근하려고 할 댸 운영체제 코드를 실행해서 프로그램 대신 자원에 접근한다운영체제가 자원을 관리,보호하는 역할을 한다 이렇게 운영체제가 보호하는 역할은 이중 모드로써 구현된다  • 이중 모드- 사용자 모드 : os, 즉 커널의 코드를 실행할 수 없는 모드- 커널 모드 : os 서비스를 제공받는 모드, 자원에 접근하는 명령어를 실행 가능 사용자 영역의 응용 프로그램은 시스템 콜을 통해 커널 모드로 전환해서 os 서비스를 제공받음 • 프로세스실행 중인 프로그램, cpu는 한번에 하나의 프로세스만 실행, 프로세스를 번갈아 가면서 실행한다 - 가상 머신가상 머신.. 2024. 7. 4.
프로그래머스 SQL 고득점 KIT 풀면서 알게된 SQL 문법,메서드 정리 • DATE_FORMAT 메서드 "2020-01-01" 형태로 날짜가 들어올때date_format(published_date,'%Y-%m-%d')//2020-07-01 • LIMIT , OFFSET상위 N개를 가져와야 할때 쿼리문 마지막에 LIMIT N; 을 붙여준다OFFSET을 사용하면 시작할 위치를 정할 수 있다LIMIT 3, OFFSET 3 하면 4번째 줄 부터 4,5,6번째 줄의 데이터를 가져온다SELECT F.FLAVORFROM FIRST_HALF F, JULY JWHERE F.FLAVOR = J.FLAVORGROUP BY F.FLAVORORDER BY (F.TOTAL_ORDER + SUM(J.TOTAL_ORDER)) DESCLIMIT 3; • ROUND(A,B) 함.. 2024. 6. 23.
백준 15654 : n과 m (재귀) 문제N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다.N개의 자연수 중에서 M개를 고른 수열입력첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.출력한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.수열은 사전 순으로 증가하는 순서로 출력해야 한다.예제 입력 1 복사3 14 5 2예제 출력 1 복사245예제 입력 2 복사4 29 8 7 1예제 출력 2 복사1 71 81 97 17 87 98 18 78 99 .. 2024. 6. 22.
컴구 총정리 클럭 속도가 높을 수록 CPU 성능 상승 hz - 1초에 클럭이 반복되는 횟수cpu 속도를 높이기 위해서 클럭을 계속 올리면 발열이 발생, 스레드나 코어의 수를 늘리자 코어 : 명령어를 실행하는 부품, cpu내에 여러 개의 코어가 잇을 수 있음멀티코어 CPU - 코어 여러개 cpu, 단일 코어보다 연산이 빠르지만 코어 갯수랑 연산속도가 정비례x • 스레드사전적 의미 : 실행 흐름 단위-hw 스레드 : 하나의 코어가 동시에 처리하는 명령어 단위, cpu에서 사용1코어 1스레드 -> 명령어 실행하는 부품 하나가 한번에 한개의  명령어 처리2코어 4스레드 -> 명령어 실행하는 부품 2개가 한번에 4개의 명령어 처리sw 스레드 : 하나의 프로그램에서의 독립적인 실행 단위, 1코어 1스레드 cpu도 여러 sw 스.. 2024. 6. 20.
자바프로그래밍 총정리2 - 스윙, GUI, 이벤트 • 자바 GUI 프로그래밍 방법GUI 컴포넌트, 그래픽awt 패키지, swing 패키지 사용 • AWT 자바 처음부터 배포된 GUI 라이브러리 java.awt 패키지AWT 컴포넌트는 중량 컴포넌트, 운영체제에 도움을 받아 작동 •Swing AWT 기반 순수 자바 언어로 만들어진 라이브러리, 클래스가 J로 시작 Swing 컴포넌트는 경량 컴포넌트, 운영체제에 의존하지 않는다JComponent를 상속받는 대부분의 스윙 컴포넌트, AWT의 Container를 상속받는 몇개의 클래스가 있다-• Swing 에서 컨테이너와 컴포넌트컨테이너 : 다른 GUI 컴포넌트를 포함 가능, 다른 컨테이너에 포함 가능최상위 컨테이너 : 다른 컨테이너에 속하지 않고 독립적으로 화면 출력 가능한 컨테이너 JFrame, JDialog.. 2024. 6. 19.
자바프로그래밍 총정리 1 - GUI 제외 부분 클래스, 객체, 상속, 모듈, 제네릭&컬랙션, 스트림, 스레드, 소켓, 네트워크, jdbc •  상속 객체 -  클래스를 실체화 한 것, instance캡술화 - 외부로부터 객체 보호클래스 : 객체 틀상속 - 자식 클래스가 부모 클래스의 속성, 기능을 받아서 확장 • 다형성 같은 이름의 메소드가 클래스나 객체에 따라 다르게 동작하도록 구현메서드 오버로딩 - 같은 이름, 매개변수 등이 달라서 다르게 동작메서드 오버라이딩 - 부모 클래스 메서드를 서브 클래스마다 다르게 구현 • 상속new로 서브 클래스 객체 만들면 생성자 호출, 실행 순서가 어캐되냐서브 클래스 생성자 호출 -> 슈퍼 클래스 생성자 호출 -> 슈퍼 클래스 생성자 실행 - > 서브 생성자 실행 서브클래스에서 super 키워드로 슈퍼 클래스 생성.. 2024. 6. 17.
백준 17298 : 오큰수 (스택) 문제크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다.예를 들어, A = [3, 5, 2, 7]인 경우 NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1이다. A = [9, 5, 4, 8]인 경우에는 NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1이다.입력첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,00.. 2024. 6. 7.
백준 2841 : 외계인의 기타 연주 (스택) 문제상근이의 상상의 친구 외계인은 손가락을 수십억개 가지고 있다. 어느 날 외계인은 기타가 치고 싶었고, 인터넷에서 간단한 멜로디를 검색했다. 이제 이 기타를 치려고 한다.보통 기타는 1번 줄부터 6번 줄까지 총 6개의 줄이 있고, 각 줄은 P개의 프렛으로 나누어져 있다. 프렛의 번호도 1번부터 P번까지 나누어져 있다.멜로디는 음의 연속이고, 각 음은 줄에서 해당하는 프렛을 누르고 줄을 튕기면 연주할 수 있다. 예를 들면, 4번 줄의 8번 프렛을 누르고 튕길 수 있다. 만약, 어떤 줄의 프렛을 여러 개 누르고 있다면, 가장 높은 프렛의 음이 발생한다.예를 들어, 3번 줄의 5번 프렛을 이미 누르고 있다고 하자. 이때, 7번 프렛을 누른 음을 연주하려면, 5번 프렛을 누르는 손을 떼지 않고 다른 손가락으로.. 2024. 6. 7.
컴퓨터 네트워크 4~7장 정리 네트워크 계층 패킷 - 다이어그램• 라우터와 스위치의 차이라우터는 네트워크 계층 장치, 다른 네트워크 간의 데이터 전송, 라우팅 테이블을 사용ip 주소를 사용해서 패킷 전송스위치는 데이터 링크 계층, 동일한 네트워크 내에서 프레임 전송 기능MAC 주소 pnp로 자가학습, 저장 • 데이터 평면과 제어 평면의 주요 기능데이터 평면은 패킷을 전달, 포워딩제어 평면은 네트워크 라우팅, 경로 계산 • 라우팅과 포워딩의 차이라우팅 - 데이터 이동의 경로 결정, OSPF, BGP등의 라우팅 알고리즘을 사용포워딩 - 라우팅 테이블 기반으로 패킷의 경로를 결정해 전달포워딩은 1hop에서 이루어진다라우터 R1 -> R2 -> R3로 갈때 각각 다음 홉을 찾아서 포워딩하는 게 반복된다 • 인터넷 네트워크 계층의 서비스 모델.. 2024. 6. 7.
백준 1874 : 스택 수열 문제스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다.1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지를 알아낼 수 있다. 이를 계산하는 프로그램을 작성하라.입력첫 줄에 n (1 ≤ n ≤ 100,000)이 주어진다. .. 2024. 6. 6.
백준 16120 : PPAP (스택) 문제bryan은 PPAP를 좋아한다. bryan은 어떻게 하면 사람들에게 PPAP를 전파할 수 있을까 고민하던 중 PPAP 문자열이라는 것을 고안하게 되었다.PPAP 문자열은 문자열 P에서 시작하여, 문자열 내의 P를 PPAP로 바꾸는 과정을 반복하여 만들 수 있는 문자열로 정의된다. 정확하게는 다음과 같이 정의된다.P는 PPAP 문자열이다.PPAP 문자열에서 P 하나를 PPAP로 바꾼 문자열은 PPAP 문자열이다.예를 들어 PPAP는 PPAP 문자열이다. 또한, PPAP의 두 번째 P를 PPAP로 바꾼 PPPAPAP 역시 PPAP 문자열이다.문자열이 주어졌을 때, 이 문자열이 PPAP 문자열인지 아닌지를 알려주는 프로그램을 작성하여라.입력첫 번째 줄에 문자열이 주어진다. 문자열은 대문자 알파벳 P와 A.. 2024. 6. 6.
백준 5397 : 키로거 (스택) 문제창영이는 강산이의 비밀번호를 훔치기 위해서 강산이가 사용하는 컴퓨터에 키로거를 설치했다. 며칠을 기다린 끝에 창영이는 강산이가 비밀번호 창에 입력하는 글자를 얻어냈다.키로거는 사용자가 키보드를 누른 명령을 모두 기록한다. 따라서, 강산이가 비밀번호를 입력할 때, 화살표나 백스페이스를 입력해도 정확한 비밀번호를 알아낼 수 있다. 강산이가 비밀번호 창에서 입력한 키가 주어졌을 때, 강산이의 비밀번호를 알아내는 프로그램을 작성하시오. 강산이는 키보드로 입력한 키는 알파벳 대문자, 소문자, 숫자, 백스페이스, 화살표이다.입력첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L ≤ 1,000,000) 강산이.. 2024. 6. 6.