ALGORITHM 54

13458_시험감독

13458_시험감독출처 : https://www.acmicpc.net/problem/13458 학생인원수(A[i]) - 총 감독관이 볼 수 있는 학생수(B).1의 값이 0보다 크다면 부 감독관이 봐야할 학생수가 남아 있다는 의미이다.1의 값이 0보다 작다면 부 감독관이 봐야할 학생수가 없다. 다음 시험관으로 넘어간다.남은 학생수가 부감독관이 볼 수 있는 학생수에 나누어 떨어진다면 몫을 결과값에 더해준다.나누어 떨어지지 않는다면, 나눈 몫에 +1을 하여 결과값에 더해준다.예외는 학생수에 총 감독관이 볼수 있는 학생수를 빼면 음수가 나올 수 있다는 것이다. 그래서 1번과 같은 조건문이 필요하다. // // 13458_시험감독.cpp // cpp // // Created by 박종훈 on 2018. 6. 12..

ALGORITHM 2018.06.12

14502_연구소

14502_연구소문제 : https://www.acmicpc.net/problem/14502입력값 받기초기 바이러스의 위치를 저장벽세우기벽은 DFS를 이용.벽의 수가 3이면 바이러스를 퍼트린다.바이러스를 퍼트린 후 다시 벽을 세워야 하므로 배열을 복사한다.(visited에 저장)BFS를 이용하여 바이러스를 퍼트린다.안전영역의 수를 센다. if( 안전영역 > max) max = 안전영역max값을 출력한다. // // 14502_연구소.cpp // cpp // // Created by 박종훈 on 2018. 6. 11.. // Copyright © 2018년 박종훈. All rights reserved. // ​ #include #include #include ​ using namespace std; ​ i..

ALGORITHM 2018.06.12

Mutex와 Semaphore

Mutex와 Semaphore멀티 프로세스, 멀티 스레드 시스템에서 공유자원에 대한 동시 간섭을 막기위한 동기화 방법 중 유저모드 동기화, 커널모드 동기화가 있다. 유저모드동기화에는 Critical Section, 커널모드동기화에는 Mutex, Semaphore가 있다.Context-switching이란? 하나의 프로세스가 CPU를 사용중 인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해 이전 프로세스의 상태를 Context에 보관하고, 새로운 프로세스의 상태를 적재하는 작업을 말한다. Context는 PCB에 기록되어 있다. Critical Section(임계 영역)멀티 프로세스의 각 프로세스가 데이터를 공유하며 수행될 때, 동시 접근 가능한 프로그램 코드영역을 말한다. 이 공유자원의 독점사용..

ALGORITHM 2018.06.07

1181_단어정렬

1181_단어정렬위 문제는 단어가 짧은 순서대로, 길이가 같다면 사전순으로 단어를 정렬하는 문제이다. 아울러 중복제거도 해주어야 한다. 여기서는 sort(start, end, compare)의 compare이 핵심이었다. 배열안의 원소를 정렬하는데, 조건에 맞게 정렬을 할수 있게 해주는 함수이다. 여기서는 cmp함수를 나타낸다. 다음은 parameter compare에 대한 설명이다. compBinary function that accepts two elements in the range as arguments, and returns a value convertible to bool. The value returned indicates whether the element passed as first ar..

ALGORITHM 2018.05.11

10989_수 정렬하기3

10989_수정렬하기3최대 10,000,000개의 수가 주어질 수 있으므로 vector, 동적할당 등을 사용하면 무조건 메모리초과 오류가 발생한다. 그래서 조건에 '이 수는 10,000보다 작거나 같은 자연수이다.' 에 초점을 맞추어 본다.array[index]Valuearray[1]0array[2]1array[3]2array[4]0array[5]4array[6]0위와 같이 입력으로 주어지는 수를 index로하는 배열의 value값을 하나씩 올려주면서 값을 저장한다. 그리고 출력하는 부분은 다음과 같이 코드를 작성한다. for(int i=1;i T; ​ while(T--) { int value; cin >> value; arr[value]++; } ​ for(int i=1;i

ALGORITHM 2018.05.11

1427_소트인사이드

1427_소트인사이드2143을 입력하면 출력을 4321을 출력하는 문제이다.여기에서는 2143을 char로 입력받아 int로 변환하여 정렬한 후 출력하는 부분이 핵심이었다. Char to int를 하기 위해 다음 코드를 사용하였다.v.push_back(T[i]-'0');전체코드#include #include #include #include ​ #define IOFAST() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); ​ ​ using namespace std; ​ int main() { IOFAST(); string T; vector v; cin >> T; for(int i=0;i

ALGORITHM 2018.05.11

10974_모든순열

10974_모든순열기본적인 n을 입력하고 n까지의 모든 순열을 구하는 문제이다. 대부분 next_permutation으로 풀었지만 dfs로 풀어봤다. 코드는 다음 그림을 그리게 된다.visited[1] = 1dfs(1)visited[2] = 1dfs(2)visited[3] = 1dfs(3)visited[3] = 0visited[2] = 0visited[1] = 0한번 방문한 곳은 1로 저장하고, 다음 번 방문시 방문한 곳은 다시 가지 않는다.code #include #include #include #include using namespace std; ​ int num; int visited[10]; int arr[10]; ​ void dfs(int number, int index){ arr[index] ..

ALGORITHM 2018.04.21

1057_토너먼트

1057_토너먼트다음 라운드의 수 = 8/2 + 8%2 라는 식을 알아야 한다.라운드의 수가 같아지면 경기를 한다.위의 방법을 어떻게 알 수 있었을까?시뮬레이션 문제라고 해서 직접 다 해보려고 했다. 하지만 적절한 자료구조와 알고리즘이 생각나지 않았다.그래서 이 문제에는 다음 라운드와 경기를 하게되는 규칙이 있었다.처음에 정해진 순서 index는 여러가지 정보를 가지고 있다.다음 라운드에서 몇번째 순서인지누구와 경기를 하는지위 정보들을 파악하면서 규칙을 찾게 된 것같다.1,2가 경기를 한다 그리고 승자는 다시 1이된다.3,4가 경기를 한다 그리고 승자는 2가 된다.5,6이 경기를 한다. 승자는 37,8 -> 49,10 ->511,12 ->6규칙이 보이게된다.

ALGORITHM 2018.04.20

1966_프린터 큐

1966_프린터 큐인쇄물을 몇번째에 출력하게 되는지 묻는 문제이다.index와 value를 가진 pair를 queue에 넣는다.입력한 값을 vector에 넣은 다음 정렬한다.규칙에 맞게 프린트하고, 맨뒤로 보내고를 반복하다가 입력한 index가 나오면 지금까지 출력한 횟수를 나타내고 종료한다.code #include #include #include #include #include ​ using namespace std; ​ ​ int main() { int T; cin >> T; while(T--){ int len, index; vector maxVector; pair p1; queue q1; cin >> len >> index; for(int j=0;j> number; maxVector.push_bac..

ALGORITHM 2018.04.18

sw_1209_SUM

SW_1209_SUM숫자만들기에 이은 문제였기에 재귀를 이용해서 풀었는데 굳이 그럴 필요가 없었다. 그래도 재귀를 이용해서 풀었다. 로직은 다음과 같다.// // sw_1209_Sum.cpp // cpp // // Created by 박종훈 on 2018. 4. 6.. // Copyright © 2018년 박종훈. All rights reserved. // ​ #include #include #define INF 2e9 ​ using namespace std; ​ int arr[100][100]; int MAX; ​ // direction은 행의 합을 구할 것인지, 열의 합을 구할 것인지 구별하기 위해 사용했다. void sum(int x, int y, int now, int direction) { //..

ALGORITHM 2018.04.17