본문 바로가기

반응형

시뮬레이션

(15)
[삼성 기출 문제] 백준 5373 큐빙 문제 링크 어떻게 풀까? 진정한 시뮬레이션입니다.정말... 말 그대로 3x3x3 큐브의 U D F B L R을 시계방향과 반시계방향으로 돌리는 것을 구현하면 됩니다! -끝- 이라고 하기엔 너무 힘들고 가혹한 시뮬레이션 입니다.사람에 따라서는 코드 길이도 200~300줄까지 될겁니다. if문과 else문으로 떡칠이 되어있기 때문이죠! 아는 분의 협조를 구해서 가져온 코드의 일부분 입니다! 123456789101112131415161718192021222324252627282930313233343536 if (s == "U+") { Up_cw(a); } else if (s == "U-") { Up_cw(a); Up_cw(a); Up_cw(a); } else if (s == "D+") { Down_cw(a);..
[삼성 기출 문제] 백준 16235 나무 재테크 문제 링크 어떻게 풀까? 최적화를 조금 많이하다보니 문제를 살짝 극혐으로 풀었습니다. 저는 DP, 슬라이딩 윈도도 함께 사용했습니다.만약 슬라이딩 윈도를 잘 모르신다면 여기를 참고하세요 슬라이딩 윈도를 쓰는 이유! 이 문제를 잘 보시면 이전 년도의 나무들에 대한 정보는 전혀 필요가 없습니다.따라서, 현재 년도와 다음 년도에 쓰일 공간만 필요한 것 입니다. 그림에서 보듯이 이전 년도의 나무 개수 자료는 전혀 쓰지 않습니다. 따라서 위처럼, 현재 나무들의 정보를 토대로 다음 년도의 나무를 저장하기 위해선 딱 2개의 정보 배열이 필요합니다. 2개의 나무 배열을 가지고 있다고 하면, y년 이라고 했을때, [y%2^1] 나무 배열을 현재 배열로, [y%2] 배열을 내년 배열로 쓰면 됩니닷! 그리고! 나무들의 정보..
[삼성 기출 문제] 백준 16236 아기 상어 문제 링크 어떻게 풀까? 시뮬레이션과 BFS가 함께 공존하는 혼돈의 문제입니다. 문제의 조건에 맞게 세세하게! 아주 세세하게! 잘 만들어야 합니다.개인적으로, 시뮬레이션이면 구조체를 활용하는 방법을 추천드립니다. 문제에 굉장히 햇갈리는 조건들이 많이 있습니다. 1. 아기 상어는 입력에서 9로 주어진다. (어려운 조건은 아니지만, 이것 때문에 고생을 많이 해서 올립니다.)2. 아기 상어는 처음에 크기가 2이다.3. 아기 상어는 자기보다 작은 물고기만 먹을 수 있다.4. 아기 상어는 자기보다 크기가 큰 물고기가 있는 칸은 지나갈 수 없다.5. 아기 상어는 다음과 같은 조건에 맞춰서 이동한다.- 아기 상어가 먹을 수 있는 물고기가 없으면 엄마에게 도움을 요청한다! (귀엽..)- 먹을 수 있는 물고기가 1마리라..
[삼성 기출 문제] 백준15685 드래곤 커브 문제 링크 어떻게 풀까? 이 문제에서 문제를 풀기위해 생각해봐야 할 것이 2 가지 있습니다. 1. 세대가 올라갈때 선을 어떻게 연결할 것인가?2. 네 꼭짓점이 드래곤 커브의 일부인 것은 어떻게 찾을 것인가? 1번부터 시작하겠습니다. 우선, 예제를 하나 보시죠! (0,0)에서 3 세대인 그래프입니다. 일단, 선의 총 길이를 보겠습니다.선의 길이는 이전 세대의 길이만큼 +됩니다!n-1 세대 길이가 x 였다면, n세대의 선분 길이는 총 2*x가 되는 것이죠!즉, 2의 제곱승으로 길이가 늘어납니다.문제에서 최대 세대가 10세대까지이므로, 길이는 총 1024까지 될 것 입니다! 그럼 가장 중요한 점!과연, n-1세대에서 n세대로 갈 때 어떻게 그려야 하는가? 입니다. 저 위의 그림에서 한 번 어떻게 그려야하는지 ..
[삼성 기출 문제] 백준 15683 감시 문제 링크 어떻게 풀까? 이 문제는 여러 개의 카메라를 돌려서 카메라의 영역에 들어오지 않는 부분(사각 지대)을 찾는 문제입니다.시뮬레이션이면서 완전 탐색의 성격을 모두 갖추고있죠! 카메라를 돌리는 것에서 다양한 방법이 있을 수 있습니다.문제를 풀기전에 1. 카메라를 어떻게 돌릴지, 2. 카메라가 비추는 영역을 어떻게 표시할지 에 대해서 생각해 봅시다. 첫 번째로, 카메라를 어떻게 돌릴까? 입니다. 보시면, 카메라는 총 5가지 종류가 있습니다.1번 카메라는 90도씩 돌린다고 하면 총 4개의 다른 부분을 보는 영역을 만들 수 있겠죠! 이렇게 4개의 방향을 만들 수 있죠!이와 비슷하게 2번은 2개, 3번은 4개, 4번도 4개, 5번은 1개의 서로 다른 방향을 만들 수 있습니다. (csize)또한, 화살표의 ..
[삼성 기출 문제] 백준 14891 톱니바퀴 문제 링크 어떻게 풀까? 전형적인 시뮬레이션 문제입니다. 문제의 내용을 그대로 구현해야합니다! 먼저 생각해보아야 할 것은 톱니바퀴의 극을 어떻게 설정할 것인가? 입니다. 톱니바퀴는 N극과 S극의 2 가지 상태로 나타낼 수 있습니다.그리고 톱니가 8개이기 때문에, 비트로 나타내면 편하게 관리할 수 있을 것 같습니다! 시계 방향과 반시계 방향도 비트 연산자 하나만으로 해결 될 수 있죠! 123456789101112131415161718192021222324252627282930313233struct TOP { int topni; bool getUP() { return topni & 1; } bool getRIGHT() { return topni & (1
[삼성 기출 문제] 백준 14890 경사로 문제 링크 어떻게 풀까? 이 문제의 핵심은 '경사로를 어떻게 놓으면 될까?'에 대한 결정을 하는 것입니다. 문제에경사로의 가로 길이가 2라고 하겠습니다. 땅의 상황은 위와 같다고 하겠습니다. 아래와 같은 경우는 경사로가 설치된 곳에 중복으로 경사로를 설치했기 때문에 나타나는 문제입니다! 이 문제를 해결하기 가장 좋은 방법은 해당 좌표에 이미 경사로가 설치되었는지를 나타내는 bool 배열을 이용하는 것입니다. 해당 지점에 최초로 경사로를 만들면, 해당 자리를 true로 만듭니다. 다음에 또다시 해당 지점에 경사로를 만들려고 한다면, 경사로를 만들 수 없는 것입니다! 위의 그림을 봅시다. 위의 그림은 경사로가 지어지는 도중에 겹쳐지는 곳이 있어서 결국 경사로를 짓지 못한다는 처리를 해줘야합니다. 하지만, 경..
[삼성 기출 문제] 백준 14503 로봇 청소기 문제 링크 클릭시 문제로 이동합니다! 어떻게 풀까? 전형적인 시뮬레이션 문제입니다!문제에서 요구하는 것들을 잘 분석해서 순서에 유의해서 잘 구현하면 됩니다!! 이 문제에서 조금 생각해봐야할 부분은 로봇 청소기가 청소를 종료해야하는 상태와 후진해야하는 상태를 구분해야한다는 것입니다. 그래서 저는 상태를 다음과같은 3가지 상태로 표현했습니다.-1: 청소를 종료해야함- 4 방향 모두 청소가 되어있는데, 뒤가 이동 불가능한 지역 1 : 청소기가 이동함.- 4 방향 중 청소가 안된 방향으로 이동- 4 방향 모두 청소가 되어있어서 현재 바라보는 방향에서 뒤 칸으로 이동 2 : 청소가 이미 되어있어서 청소가 안된 곳 발견 필요 상태가 -1이 나오면, 함수에서 return값으로 현재까지 청소한 구역의 개수를 반환합니다..

반응형