본문 바로가기

BOJ

백준 16197 / 두 동전 구슬 탈출2 문제(https://naivep.tistory.com/25)와 해법은 같다. 총 버튼을 10번 누를 수 있으니 오른쪽 왼쪽 위 아래 4 버튼을 10번씩 누를 수 있는 모든 경우의 수를 구한다. 4^10은 100만정도되니 시간초과에 걸리지 않는다. 동전을 움직이기 전, 맵의 가장자리를 모두 x로 채운다. (나간 경우를 처리하기 위해) 구한 경우의 수 마다 동전을 움직여서 그 턴에 빠진 개수를 구한다. 빠진 개수가 1이면 몇번쨰 누르는 버튼인지 리턴하고, 빠진 개수가 2이면 9999를 리턴한다. (9999는 경우를 무시하기 위해 임의로 설정해놓은 수) 10번을 다 눌렀는데 두 개의 코인이 모두 맵 안에 있어도 9999를 리턴한다. 코드 123456789101112131415161718192021..
백준 15683 / 감시 문제를 읽었을 때, 어떻게 해결해야할지 단계가 나눠져야 한다. 내가 해결한 방법은 1. cctv의 번호와 방향을 pair로 집어넣는다. 이떄 dfs를 사용하여 어떤 방향을 비출지에 대한 모든 경우의 수를 담는다. 1번 : 동 1, 서 2, 남 3, 북 4 2번 : 동서 1, 남북 2 3번 : 동북 1, 서북 2, 서남 3, 동남 4 4번 : 북x 1, 동x 2, 서x 3, 동x 4 5번 : 동서남북 1 2. 집어넣은 cctv를 하나씩 꺼내어, 번호와 방향을 확인한다. 3. cctv의 번호와 방향에 따라 동,서,남,북 한 방향씩 빛(cctv가 쏘는??)을 비춘다. 4. map이 0이면서 빛이 비추어지지 않은 칸을 세어 최소값과 비교한다. cctv가 위치한 칸과 벽은 사각지대에 포함이 되지 않는다. cctv..
백준 3568 / iSharp 신박한 문제 문제에 제시된 조건대로 풀면되는데, 변수 이름은 거꾸로 뒤집어지면 안된다. 곧, [], &, *이 아닌 문자라면 따로 담아주어 처리해주어야 한다. 이때 reverse를 사용했다. (vector 등 자료구조에 사용되는 reverse지만 string에도 적용된다!) 코드 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768#include#include#include#include#include#include using namespace std; vectorarr; int main() { //freopen("Text.txt"..
백준 15686 / 치킨 배달 단계별로 무엇을 짜야할지 생각하고 풀면 쉬운 문제. 1. 치킨집 전체 개수에서 m개를 오픈할 때 모든 경우를 구하는 함수를 만들고 2. 1번에서 만들어진 경우에서 도시의 치킨 거리를 구하면서 최소값을 구한다. 코드 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697#include#include#include#include#include#include#include using namespace std; int map[51][51]..
백준 15685 / 드래곤 커브 규칙 찾기가 중요한 문제 1세대 드래곤 커브가 (0,0)에서 그려질때, 방향을 나열하면 0,1 2세대 드래곤 커브의 경우엔 0,1,2,1 3세대 드래곤 커브의 경우 0,1,2,1,2,3,2,1 0,1,2,1과 2,3,2,1을 비교하면 0,1,2,1를 거꾸로 한 1,2,1,0에서 1을 추가하니 2,3,2,1이됨을 확인할 수 있다. 이 규칙을 찾으려면.. 음..... 코드 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071#include#include#include#include using namespace std; int..
백준 2933 / 미네랄 구현하기 꽤나 복잡한 문제. 처음엔 5개의 높이마다 왼,오 두번씩 던지는 줄 알아서 꽤나 헤맸다. (...) 알고리즘을 행동별로 나누어 계층적으로 짜면 수월하다. 1. 해당되는 높이로 막대기를 던져 x가 맞으면 부순다. 2. 맵을 확인하여 클러스터를 생성, 그 클러스터가 땅에 붙어있으면 pass, 땅이나 다른 클러스터와 떨어져 있으면 3번. 3. 분리되어 있는 클러스터를 한칸 떨어뜨린다. 4. 한칸 떨어진 클러스터가 땅에 닿았는지 혹은 다른 클러스터에 닿았는지 확인한 후, 닿지 않았다면 3번. 닿았으면 다음 막대기를 던진다. 3번을 수행할때, 맵만 바꾸어주는 것이 아니라, 클러스터를 만들때 true로 체크했던 bool 배열(check)도 바꾸어 주어야한다. 또한 한개의 포문안에서 한칸을 지우고 그 밑에 ..
백준 2422 / 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 포문 세번돌면 되는데 n의 최대값이 200이기때문에 충분(?)하다. 모든 아이스크림 조합을 true로 해준 초기화 해준다음 (역으로도 true) 맛없는 조합끼리 false해준다 (역으로도 false) 포문을 돌면서 true의 조합일때만 정답을 ++해주면 된다. 낚이는 경우 : 아이스크림 번호는 1부터 시작한다. 0이 아니다. 코드 1234567891011121314151617181920212223242526272829303132333435363738394041424344#include#include#include#include using namespace std; bool check[201][201]; int ans = 0;int n, m; int main() { //freopen("Text.txt", ..
백준 13458 / 시험 감독 정답률이 왜 낮지라는 생각이 들만큼 쉽게 풀었다. 우선 시험자에 있는 응시자의 수에서 B를 빼고 0 이하가 되면 PASS 0 초과가 되면 그 수를 C로 나눈 몫과 나머지를 구한다. 나머지가 0이면 답에 몫만 더해주고 나머지가 1 이상이면 몫+1을 답에 더해준다. 이때 답은 굉장히 높은 수(int가 못담는)가 나올 수 있기 때문에 long long으로 담아준다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#include#include#include#include using namespace std; vectorroom; int main() { //freopen("Text.txt", "r"..