전체 글 94

BOJ 1157번 풀이

문제 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다. 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는?를 출력한다. 풀이 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #include #include int main(){ int al[26]={0}; char result; int max=-1,max_val=..

PS/BOJ 2022.05.12

BOJ 8958번 풀이

문제 "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다. "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다. OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오. 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다. 각 테스트 케이스마다 점수를 출력한다. 풀이 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21..

PS/BOJ 2022.05.12

BOJ 4344번 풀이

문제 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. 첫째 줄에는 테스트 케이스의 개수 C가 주어진다. 둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다. 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다. 풀이 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include int main(){ int C,N,input,sum,cnt=0; int arr[1000]={0}; double avg; s..

PS/BOJ 2022.05.12

size_t, pid_t,ssize_t...

size_t, pid_t같은 자료형들은 primitive 자료형이라고 한다. primitive 자료형들은 sys/types.h 헤더파일에 정의되어있다. int나 long long int 같은 자료형을 사용한다면, 나중에 크기나 데이터 표현 방식이 달라지면서 코드를 사용할 수 없게 될 수 있다. int형은 16bit 운영체제 시절에는 2byte의 크기를 가졌었고 32bit 운영체제에선 4byte의 크기를 가진다. 이렇게 자료형의 크기가 바뀌게 되면 전체 코드 수정이 불가피 했었다. 그래서 헤더파일에 typedef를 사용해서 미리 unsigned int는 size_t처럼 미리 정의해두고, 만약 수정이 필요하면 헤더파일만 수정해서 자료형을 재정의해주면 된다. 결과적으로 소스 전체를 수정할 필요가 없게 된다. ..

프로그래밍/C 2022.05.03

open, read 시스템콜을 이용한 파일 입출력

유닉스 시스템에선 모든 것이 파일이다. 장치도 파일로 취급된다. /dev/had1 같은 하드디스크 상의 파일도 존재한다. 이렇게 장치도 파일로 인식을 하면, 파일을 다루는 것처럼 장치에 접근할 수 있다. 당연히 파일의 종류도 나뉘어 있다. 예를 들어 d가 디렉토리, c가 장치인 것처럼 말이다. 파일을 다루기 위한 기본적인 흐름은 아래와 같다. 1) 파일을 연다. 2) 파일을 읽거나 쓴다. 3) 파일을 닫는다. 기본적으로 프로세스는 유저 모드에서 직접적으로 시스템에 접근할 수 없다. 때문에 시스템 콜을 통해서 운영체제에게 자원을 요청한다. 키보드 입력이나 메모리 공간을 요청하는 것들은 모두 자원을 요청하는 것의 예시이다. 그리고 이런 작업들은 커널 모드에서 이루어지게 된다. 아래 사진을 보면 커널이 프로세..

프로그래밍/C 2022.05.03

FTZ level10 풀이

*FTZ를 공부하면서 배운 것들을 정리했습니다. 틀린 정보가 있을 수 있습니다. 계정/비번: level10/interesting to hack! 로그인을 하고 힌트를 봤습니다. 라고 합니다. 공유 메모리에 대해서 구글링을 해봤습니다. https://www.joinc.co.kr/w/Site/system_programing/IPC/SharedMemory 공유 메모리의 사용 #include #include int shmget(key_t key, int size, int shmflg) void *shmat( int shmid, const void *shmaddr, int shmflg ) int shmdt( const void *shmaddr) int shmctl(int shmid, int cmd, struct ..

WARGAME/FTZ 2022.05.03

FTZ level9 풀이

*FTZ를 공부하면서 배운 것들을 정리했습니다. 틀린 정보가 있을 수 있습니다. 계정/비번: level9/apple 로그인을 하고 힌트를 확인했더니 bof의 소스코드가 적혀있네요. /usr/bin/bof의 권한을 확인해보니 level 10으로 setuid bit가 걸려있습니다. 힌트에 나온 코드를 보면, buf2와 buf를 선언하고 stdin을 통해 입력을 40바이트만큼 받아 buf에 저장하는 것을 알 수 있습니다. 입력을 받고 나서 buf2와 "go"를 2번째 자리까지 비교합니다. 같다면 "Good Skill!"을 출력하고, setreuid를 통해서 RUID와 EUID를 3010으로 바꿔주고 쉘을 실행시킵니다. setreuid 함수는 아래 잘 설명되어있습니다. https://man7.org/linux/..

WARGAME/FTZ 2022.04.14