목록분류 전체보기 (104)
개발자 김수진
[문제] https://www.acmicpc.net/problem/15683 15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감�� www.acmicpc.net [풀이] DFS를 사용해 각 CCTV에 대해 모든 경우의 수를 따져주고 최솟값을 구하면 된다. [그림 1]과 같이 DFS 함수에서 visited 배열에 CCTV가 감시할 방향을 저장해놓고 모든 CCTV에 대해 저장했다면 solve 함수에서 방향에 맞게 감시 진행 이런 방식으로 spread 함수에서 좌표랑 방향을 인자 값으로 넘겨주고 벽을 만나기 전까지 감시할 수 있는 좌표에..
[문제] https://www.acmicpc.net/problem/14890 14890번: 경사로 첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다. www.acmicpc.net 시뮬레이션 문제로 높이가 같은 경우 -> 다음 index로 넘어감 높이가 다른 경우 -> 차이가 1보다 큰지 확인 행과 열을 올렸다 하나의 일차원 배열에 옮겨서 확인 (어차피 행과 열 확인하는 방법은 같으니까) [풀이] 1. check 함수 다음 인덱스랑 높이 비교 높이차가 같은 경우 다음 인덱스로 넘어감. 높이차가 1보다 크다면 check 함수 바로 return. 높이차가 1인 경우 comp 함수 호출. 0부..
[ 정의 ] 프로세서가 자원을 얻지 못해 무한정 기다리며 다음 처리를 하지 못하는 상태 특정 자원에 대해 여러 프로세스가 경쟁 상태일 때 발생한다. '데드락' 또는 '교착상태'라고 한다 . 아래 [그림 1]과 같이 P1 프로세스가 R1을 점유, P2 프로세스가 R2를 점유하고 있는 상태에서 P1은 R2 리소스에 접근 요청을 보내고 , P2는 R1 리소스에 접근 요청을 보낸다면 두 프로세스는 리소스를 할당받지 못하고 계속 대기상태이다. 이러한 상태를 데드락(DeadLock) 이라고 한다. [ 데드락 발생 조건 ] 아래 4가지 조건을 모두 만족시키면 데드락 발생. ( 4가지 조건 모두 만족시킨다고 무조건 데드락 발생하는건 아니다.) 데드락이 발생할 경우 4가지 조건을 모두 만족한다. Mutual Exclus..
[문제] https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRUN9KfZ8DFAUo&categoryId=AWXRUN9KfZ8DFAUo&categoryType=CODE SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com [풀이] 시뮬레이션 문제인 것 같다. 문제 조건만 잘 따져주면서 풀면 된다. N개의 숫자를 입력 받아서 사각형 각 변에 존재하는 숫자 조합 중에서 K번째로 큰 수를 구하면 된다. (숫자 조합이 중복되는 것이 없도록 주의) 1. 회전하기 사각형에 존재하는 각 숫자들은 시계방향으로 한칸씩 이동한다. => 총 N/..
벡터 시간 오래 걸릴까봐 안 쓰고 풀었는데 오히려 벡터 사용하니까 더 빠르다. DFS로 접근 - 벡터 대신 반복문 사용 시간 : 124ms #include #define MAX 20 using namespace std; int N; int map [MAX][MAX]={0,}; int visited[20]={0,}; int MIN = 1e9; void solve() { int start=0; int link=0; for(int i=0;i N; for(int i=0;i
[풀이 1] 처음에 시뮬레이션인줄 알고 조건 하나씩 다 따지면서 아래와 같이 구현 #include using namespace std; //0: 빈칸, 1:벽 int N,M; int map[50][50]; int dir; int x,y; int cnt=0; // number of clean space by robot //0:북 , 1:동, 2:남, 3:서 int dx[4] = {-1,0,1,0}; int dy[4] = {0,1,0,-1}; int main(void) { cin >> N >> M ; cin >> x >> y >> dir; for(int i=0;i map[i][j]; } while(1){ if(map[x][y]==0){ map[x][y]=2; //현재 위치 청소 cnt++; } int pdi..
#include using namespace std; int N,M,K; int map[20][20]={0,}; int x,y; int dx[4] ={0,0,-1,1}; int dy[4] = {1,-1,0,0}; int dice[7]={0,}; //지도 위 : 1 , 동쪽 : 3 , // 처음 주사위 모든 면에 0 // 이동한 칸이 0인 경우 -> 주사위에 있는 숫자가 바닥면으로 // 0이 아닌 경우 -> 주사위로 복사되고 칸은 0으로 int main(void) { cin >> N >> M >> x >> y >> K; for(int i=0;i map[i][j]; } for(int i=0;i> dir; int nx = x + dx[dir-1]; int ny = y + dy[dir-1]; if( nx < 0..
처음에 아래와 같이 풀었는데 메모리 초과 발생. 아무래도 2차원 배열에 의해서 메모리 초과가 발생한 것 같다. int형 약 4억 개면 1.6GB 정도 되는데 문제 조건에서는 메모리가 256MB로 제한되어 있다. #include #include using namespace std; int N,M; int map[20002][20002]={0,}; int dis[20002]={0,}; int main(void) { queue q; int start,end; cin >> N >> M; for(int i=0;i> start >> end; map[start][end]=1; } q.push(1); dis[1] = 0; while(!q.empty()){ start = q.front(); q.pop(); for(int..