본문 바로가기

반응형

전체 글

(168)
[백준] 3190번 뱀 3190번 뱀 이해하기 뱀의 처음 시작 위치는 맨위 맨좌측, 길이는 1, 오른쪽을 보고있다. 뱀은 몸길이를 먼저 늘려 머리를 다음칸에 위치시킨다. 이동한 칸에 사과가 있다면, 사과가 없어지고 꼬리는 그대로이다. 이동한 칸에 사과가 없다면, 몸길이를 줄여서 꼬리가 있던 칸을 비워준다. 즉, 몸길이는 변하지 않는다. 게임이 끝나는 조건이 뱀이 벽 혹은 몸통에 부딪히면 일때 이 게임이 몇 초에 끝나는지를 계산하는 문제. 뱀을 이동시키면서 상태를 보는 시뮬레이션 문제. 구현하기 1초마다 뱀의 움직임 상태 반환 이동에 성공했으면 true를 반환, 실패했으면 false를 반환 실패는 몸통에 닿았거나 벽에 부딪혔을 때 뱀의 몸통 상태는 queue에 넣어서 관리 움직였을 때 사과가 있으면 꼬리 그대로, 없으면 꼬리 삭..
[백준] 12100번 2048(Easy) 12100번 2048(Easy) 이해하기 한 번의 이동은 보드 위에 있는 블록을 같은 방향으로 이동시킨다. 이동했을 때 같은 값을 갖는 두 블록이 충돌하면 두 블록은 하나로 합쳐진다. 같은 이동에서 합쳐진 블록은 다른 블록과 다시 합쳐질 수 없다. 최대 5번의 이동을 통해 만들어 질 수 있는 블록의 최대값을 구한다. 블록을 최대 횟수까지 이동시키며 상태를 보는 완전탐색 문제. 구현하기 한번의 방향으로 이동시키면서 같은 값의 블록이 충돌하면 두 블록을 하나로 합치고 이미 합쳐진 블록은 다른 블록과 합쳐지지 못하게 check배열을 이용한다. vector move(vector map, int dir) { vector ret(N,vector(N)); memset(check,false,sizeof(check));..
[백준] 13460번 구슬 탈출2 13460번 구슬 탈출2 이해하기 빨간 구슬과 파란 구슬이 보드를 움직일 때마다 동시에 움직인다. 빨간 구슬만 구멍에 빠져야 한다. 파란 구슬이 동시에 빠지는 경우는 실패한 경우로 생각한다. 성공한 경우에 구슬을 최소로 움직인 경우를 구한다. 구현하기 빨간 구슬과 파란 구슬이 동시에 움직이는 것 Point move(Point ball, int dir) { int nx = ball.x+dx[dir], ny = ball.y+dy[dir]; while(1) { if(map[nx][ny] == '#') { return {nx-dx[dir],ny-dy[dir]}; } else if(map[nx][ny] == 'O') { return {-1,-1}; } nx += dx[dir]; ny += dy[dir]; } } ..
7576. 토마토 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182#include #include "bits/stdc++.h" using namespace std; int vx[] = {1, -1, 0, 0};int vy[] = {0, 0, 1, -1}; int main(){ int M,N; scanf("%d %d", &M, &N); int tomatos[1001][1001]; for (int i = 0; i
1259. 팰린드롬수 1234567891011121314151617181920212223242526272829303132#include "bits/stdc++.h" using namespace std; bool isPalin(vector nums) { int size = nums.size(); for(int i = 0; i 0) { v.push_back(n % 10); n /= 10; } if(isPalin(v)) printf("yes\n"); else printf("no\n"); } return 0;}Colored by Color Scriptercs 이 문제는 숫자가 하나 주어졌을 때 그 숫자가 팰린드롬 수 인지 판별하는 문제이다. 팰린드롬은 위에서 설명되있는 것과 같이 뒤집었을때 같은 모양을 하고 있는 것을 말한다. 이를..
타일 장식물 1234567891011121314151617#include #include using namespace std; long long dp[80] = {0}; long long solution(int N) { if(N == 1) return 4; dp[0] = 1; dp[1] = 1; for(int i = 2; i
1181. 단어 정렬 12345678910111213141516171819202122232425262728293031323334#include #include #include #include using namespace std; bool compare(string a, string b) { return a.length() == b.length() ? a
카펫 12345678910111213141516171819202122232425262728#include #include using namespace std; vector solution(int brown, int red) { vector answer; int sum = brown + red; for(int i = 3; i * i j) { answer.push_back(i); answer.push_back(j); } else { answer.push_back(j); answer.push_back(i); } } } } return answer;}Colored by Color Scriptercs 이 문제는 규칙을 찾으면 간단한 문제이다. 먼저 첫번째 예시를 기준으로 설명하면 갈색이 10개, 빨간색이 2개이다. 그..