본문 바로가기

code/BOJ

(63)
백준 3190 뱀 문제: 3190번: 뱀 문제 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 보드의 상하좌우 끝에 벽이 있다. 게임이 시작할때 뱀은 맨위 맨좌측에 위치하고 뱀의 길이는 1 이다. 뱀은 처음에 오른쪽을 향한다. 뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따 www.acmicpc.net 코드: map 상하좌우에 padding 넣어서 가로 세로 크기가 2씩 증가했지만 배열 크기를 증가시키지 않아 '틀렸습니다'. /* 1. 좌표 1부터 시작하므로, 뱀 시작 위치는 (1, 1) */ #inc..
첫번째 #include #include #include #include #include #define hash(r, c) ((r) * 2002 + (c)) using namespace std; int T, N; unordered_map vst;// 초기화 완료 int ans;// 초기화 완료 struct info{ int r, c, d, k; }; vector atom; #define IN(r, c) (0 > r >> c >> d >> k; atom.push_back({ r + 1000, c + 1000, d, k }); } ans = 0; while(1) { bool proc = false; vst.clear(); for(int a = 0; a < atom.size(); ++a){ // 처리 대상 아니면 co..
d #include #include #include #include #include #define hash(r, c) ((r) * 2002 + (c)) using namespace std; int T, N; int vst[2001][2001];// 초기화 완료 vector cls[1001];// 초기화 완료 int ans;// 초기화 완료 struct info{ int r, c, d, k; }; vector atom; #define IN(r, c) (0 > r >> c >> d >> k; atom.push_back({ r + 1000, c + 1000, d, k }); } ans = 0; int c = 0; while(1) { bool proc = false; for (int cc = 1; cc < c; +..
d #include #include using namespace std; int T, N; int vst[2001][2001];// 초기화 완료 vector cls[1001];// 초기화 완료 int ans;// 초기화 완료 struct info{ int r, c, d, k; }; vector atom; #define IN(r, c) (0 > r >> c >> d >> k; atom.push_back({ r + 1000, c + 1000, d, k }); } ans = 0; int c = 0; while(1) { bool proc = false; for (int cc = 1; cc < c; ++cc) cls[cc].clear(); c = 1; for(int a = 0; a < atom.size(); ++a)..
백준 9328 열쇠 문제: 9328번: 열쇠 문제 상근이는 1층 빌딩에 침입해 매우 중요한 문서를 훔쳐오려고 한다. 상근이가 가지고 있는 평면도에는 문서의 위치가 모두 나타나 있다. 빌딩의 문은 모두 잠겨있기 때문에, 문을 열려면 열쇠가 필요하다. 상근이는 일부 열쇠를 이미 가지고 있고, 일부 열쇠는 빌딩의 바닥에 놓여져 있다. 상근이가 훔칠 수 있는 문서의 최대 개수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수가 주어진다. 테스트 케이스의 수는 100개를 넘지 않는다. 각 www.acmicpc.net 코드: 아이템 주워먹고 맵에서 지우기! /* 1. 아이템 먹고 맵에서 지우기 */ #include #include #include #define is_lc(ch) ('a' > map[r][c]; } ..
백준 1726 로봇 문제: 1726번: 로봇 많은 공장에서 로봇이 이용되고 있다. 우리 월드 공장의 로봇은 바라보는 방향으로 궤도를 따라 움직이며, 움직이는 방향은 동, 서, 남, 북 가운데 하나이다. 로봇의 이동을 제어하는 명령어는 다음과 같이 두 가지이다. 명령 1. Go k - k는 1, 2 또는 3일 수 있다. 현재 향하고 있는 방향으로 k칸 만큼 움직인다. 명령 2. Turn dir - dir은 left 또는 right 이며, 각각 왼쪽 또는 오른쪽으로 90° 회전한다. 공장 내 궤 www.acmicpc.net 코드: /* 1. 문제는 좌표 1부터 시작, 나는 0부터 시작 -> 조정 필요 */ /* 2. 궤도를 따라 움직이므로, 중간에 끊기면 더 이상 앞으로 나아갈 수 없다. */ #include #include ..
백준 1938 통나무 옮기기 문제: 1938번: 통나무 옮기기 첫째 줄에 주어진 평지의 한 변의 길이 N이 주어진다. (4> N; vector str, ext; fill(map[0], map[0] + N + 2, 1); f(r, 1, N + 1) { map[r][0] = map[r][N + 1] = 1; f(c, 1, N + 1) { char ch; cin >> ch; switch (ch) { case 'B': str.emplace_back(r, c); break; case 'E': ext.emplace_back(r, c); break; } map[r][c] = (ch == '1'); } } fill(map[N + 1], map[N + 1] + N + 2, 1); bool tp = str[0].first == str[1].first..
백준 2665 미로 만들기 문제: 2665 2665번: 미로만들기 첫 줄에는 한 줄에 들어가는 방의 수 n(1≤n≤50)이 주어지고, 다음 n개의 줄의 각 줄마다 0과 1이 이루어진 길이가 n인 수열이 주어진다. 0은 검은 방, 1은 흰 방을 나타낸다. www.acmicpc.net 코드: 벽을 부쉈다고해서 map에 반영시킬 필요 없음! /* 1. 벽을 부쉈다고 mz에 반영시킬 필요 없음 */ /* 2. 벽을 부술 수 있는 경우의 수는 src, dst간 최단 거리인 50 * 2 - 2 */ #include #include #define f(i, n) for(int i = 0; i < (n); ++i) using namespace std; bool mz[50][50]; bool vst[50][50][98];/* 2 */ struct ..