본문 바로가기

Algorithm/Implementation

(751)
(C++) - 백준(BOJ) 8972 번 : 미친 아두이노 www.acmicpc.net/problem/8972 8972번: 미친 아두이노 요즘 종수는 아두이노를 이용해 "Robots"이라는 게임을 만들었다. 종수는 아두이노 한대를 조정하며, 미친 아두이노를 피해다녀야 한다. 미친 아두이노는 종수의 아두이노를 향해 점점 다가온다. www.acmicpc.net 구현 문제였습니다. 풀이방법 1. 매 이동마다 문제에 나와있는 1 ~ 5를 수행합니다. 2. 종수를 이동시킵니다. 이 때 이동하려는 곳에 미친 아두이노가 있다면 X 번째 움직임을 반환합니다. 잘 이동한다면 이동시킨 후 0을 반환합니다. 3. 미친 아두이노들을 이동시킵니다. 최소 거리로 이동시킵니다. map으로 미친 아두이노들의 r,c좌표를 pair로 하여 key를 설정하고 그곳의 아두이노 개수를 저장해줍니다...
(C++) - 백준(BOJ) 11559번 : Puyo Puyo www.acmicpc.net/problem/11559 11559번: Puyo Puyo 총 12개의 줄에 필드의 정보가 주어지며, 각 줄에는 6개의 문자가 있다. 이때 .은 빈공간이고 .이 아닌것은 각각의 색깔의 뿌요를 나타낸다. R은 빨강, G는 초록, B는 파랑, P는 보라, Y는 노랑이다. www.acmicpc.net 구현문제였습니다. 풀이방법 1. 모든좌표를 돌면서 터뜨려봅니다. bfs를 통해 같은 영역이 있으면 없애줄 좌표들의 후보 queue인 popQ에 저장합니다. 같은 영역이 4이상이라면 popQ를 하나씩 빼주면서 해당 좌표의 값을 '.'로 바꿔줍니다. 2. 터진 후에는 내립니다. 세로로 한 열씩 떼서 확인합니다. 필드의 행,열의 값이 '.'이 아니라면 queue에 넣어줍니다. 최하단부터 qu..
(C++) - 백준(BOJ) 2828번 : 사과 담기 게임 www.acmicpc.net/problem/2828 2828번: 사과 담기 게임 상근이는 오락실에서 바구니를 옮기는 오래된 게임을 한다. 스크린은 N칸으로 나누어져 있다. 스크린의 아래쪽에는 M칸을 차지하는 바구니가 있다. (M> n >> m >> j; int left = 1,right = m; while(j--){ int pos; cin >> pos; while(left > pos || right right) right++, ans++, left++; if(pos < left) right--,ans++,left--; } } cout
(C++) - 백준(BOJ) 2526번 : 싸이클 www.acmicpc.net/problem/2526 2526번: 싸이클 두 자연수 N과 P를 가지고 다음 과정을 거쳐서 나오는 숫자들을 차례대로 출력해보자. 처음 출력하는 숫자는 N이고, 두 번째 이후 출력하는 숫자들은 N을 곱하고 P로 나눈 나머지를 구하는 과 www.acmicpc.net 간단한 구현문제였습니다. 풀이방법 1. n은 최대 1000, p가 97까지이므로 나머지를 적용했을 때 96이하의 수가 나오므로 배열 1000개로 어떤 숫자가 몇 번째 항인지를 구할 수 있습니다. 해당 변수는 vector자료형 nums로 선언합니다. 2. while loop를 돌면서 이미 셌던 수가 나올때까지 다음을 수행합니다. 2-1. 수 ne는 n으로 시작합니다. 그러면서 수 ne가 수열에서 몇 번째 항인지를 저장해..
(C++) - 백준(BOJ) 2174번 : 로봇 시뮬레이션 www.acmicpc.net/problem/2174 2174번: 로봇 시뮬레이션 첫째 줄에 두 정수 A, B가 주어진다. 다음 줄에는 두 정수 N, M이 주어진다. 다음 N개의 줄에는 각 로봇의 초기 위치(x, y좌표 순) 및 방향이 주어진다. 다음 M개의 줄에는 각 명령이 명령을 내리는 순 www.acmicpc.net 구현 문제였습니다. 기존 열,행 형식이 아닌 진짜 x,y좌표평면으로 생각해야 하므로 인덱스 처리가 약간 까다로웠습니다. 풀이방법 1. 입력받고 기존에 많이 했던 행,열의 방식으로 바꾸어 정보를 저장합니다. 2. 그 후 명령마다 반복횟수만큼 방향을 고려해 안전한지 확인하고 로봇을 이동합니다. 벽에 충돌 또는 로봇과 충돌할 경우에는 정답을 갱신해줍니다. 정답(ans 변수)값이 이미 있으면 굳..
(C++) - 백준(BOJ) 14499번 : 주사위 굴리기 www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지도 www.acmicpc.net 구현 문제였습니다. 풀이방법 다음과 같이 주사위의 방향을 설정해줍니다. 방향 설정 후 명령어를 입력받을 때마다 정답을 출력해주면 됩니다. Code #include #define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); using namespace std; //위,아래,동,서,남..
(C++) - 백준(BOJ) 20056번 : 마법사 상어와 파이어볼 www.acmicpc.net/problem/20056 20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net 구현문제였습니다. 풀이방법 1. 파이어볼은 행,열,질량,속도,방향 5개의 정보를 포함하고 있습니다. 구조체를 이용해줍니다. 해당 구조체들을 원소로 파이어볼들의 정보를 담은 vector 변수 fireBalls, 격자의 정보를 저장할 vector변수 board를 선언해줍니다. 그리고 8방향을 표현할 dx,dy배열, 모두 홀수또는 짝수 방향일 때 분산시킬 방향의 정보를 담는 o..
(C++) - 백준(BOJ) 1913번 : 달팽이 www.acmicpc.net/problem/1913 1913번: 달팽이 N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서 www.acmicpc.net 구현문제였습니다. 풀이방법 1. (n/2, n/2) = 1로 시작합니다. 2. cnt가 n*n될때까지 cnt를 1씩 증가시켜주면서 방향을 전환해줍니다. 한 변을 채운다는 느낌으로 선언한 a배열에 cnt를 저장해주시면됩니다. 한 변을 채우고 나면 dir변수를 바꿔서 방향을 전환해줍니다. Code #include using namespace std; int n, x, y, dir, findNum, cnt = 1, p..