본문 바로가기

반응형

BOJ

(36)
[삼성 기출 문제] 백준 12100 2048 (easy) 문제 링크 클릭시 문제로 이동합니다. 어떻게 풀까? 해당 문제는 크게 2 부분으로 나눌 수 있습니다. 1. 재귀를 이용하여 블록을 위/아래/왼쪽/오른쪽 으로 최대 5번 이동시키는 부분2. 이동시켜서 최댓값이 어떻게 되는지 알아내는 부분 이 중, 1번은 2차원 배열 restore[][]를 이용하면, 기존의 맵을 저장하고 복구하면서 맵을 5번까지 이동시키는 방법으로 구현할 수 있습니다. 가장 중요한건 2번이죠! switch를 쓰면 비슷한 방법을 4번 반복해야하기 때문에, 짧게 이를 해결하는 방법을 소개해드리겠습니다.(물론, 실전에서 이 방법까지 생각하려면 힘들겠지만, 그래도! 여긴 블로그니까요!) 우선, 기본적으로 블록을 이동시키는 방법은 덱을 이용하는 것입니다.덱의 맨 뒤의 수와, 현재 맵에 적혀있는 블록..
[삼성 기출 문제] 백준 13460 구슬 탈출 2 문제 링크 클릭시 문제로 이동합니다. 어떻게 풀까? 우선, 맵의 크기를 확인해 봅시다! 10 * 10의 맵의 크기를 가집니다. 그리고, 빨간 공과 파란공 2 가지 경우가 있죠. 그 말인 즉슨! 4 차원 배열을 통해서 [빨간공의 행][빨간공의 열][파란공의 행][파란공의 열] 형태로 visit 처리를 만들 수 있고,이를 통해 bfs를 이용하면 구슬을 빼낼 수 있는 최단 시간을 출력할 수 있습니다! 큐 에는 빨간공의 위치와 파란공의 위치를 넣으면 되겠죠! 10번이 넘어가면 -1을 return 하면 되겠군요! 그럼, 판을 상, 하, 좌, 우로 움직일 땐 어떻게 하면 될까요?그저 공의 위치를 저장해 놓고, 오른쪽으로 이동하면서 벽이 만나는 경우 그 전의 위치에다가 공을 위치시키기만 하면 됩니다!아래의 경우를 보..
[BOJ] 5623. 수열의 합 문제 링크 어떻게 풀까? 와 의 합만이 나와있기 때문에 곤란함을 느낄 수도 있습니다! 하지만 생각보다 간단하게 풀 수 있죠. 맨 왼쪽 위는 입니다. 그리고 그 다음은 이죠엇! 그런데 아래에 이 있습니다! 이 세개를 한번 잘 요리조리 해봅시다! 우선 입니다.이제 여기서 를 얻을 수 있습니다!! 이제 여기서 2를 나눠주면 완전한 을 얻을 수 있고, 1 행에 있는 모든 내용은 이기 때문에, 모든 를 구할 수 있습니다!! 코드 12345678910111213141516171819202122232425262728293031323334#pragma once#include using namespace std; int arr[2][1000];int main() { ios_base::sync_with_stdio(fals..
[BOJ] 2789. 유학 금지 문제 링크 어떻게 풀까? 주어진 배열에서 C, A, M, B, R, I, D, G, E글자가 아니라면 결과를 출력하기 위한 캐릭터형 배열에 따로 보관해주면 됩니다! 예를 들어보겠습니다! LOVE가 입력으로 들어오면 어떻게 해야할까요!? L은 해당 글자와 상관없기 때문에 res[0]에 넣습니다!O 도 마찬가지이기 때문에 res[1]에 넣습니다!V도 마찬가지이기 때문에 res[2]에 넣습니다!E는 검열되는 글자이기 때문에 버립니다. 그럼 결과는 "LOV"가 됩니다. 코드 12345678910111213141516171819202122232425262728293031323334353637#pragma once#include#include using namespace std; char del[10] = "CAM..
[BOJ] 12782. 비트 우정지수 비트 우정지수 클릭시 이동합니다! 어떻게 풀까? 할 수 있는 연산은 2개 입니다! 1. 두 수의 위치를 바꾼다.2. 한 수의 비트를 바꾼다. 두 수의 위치를 바꿀 수 있다는 것은, 한 번의 연산으로 두 개의 수를 동시에 고칠 수 있다는 가능성을 가지고 있다는 것이죠. 한 번에 두 수의 비트를 옳게 바꾸는 방법은 무엇일까요!? 만약 바꾸고자 하는 두 수가 같다면, 연산의 의미가 없습니다. 만약, 바꾸고자 하는 두 수의 비트가 다르다고 하더라도, 이미 제대로 된 짝을 가지고 있다면, 바꾸는 의미가 없습니다. 즉, 한 번의 연산으로 두 개의 비트를 똑같게 만들고 싶다면, 위처럼 서로 짝이 맞지 않으면서, 서로 다른 비트를 가지는 두 비트의 자리를 바꿔야 합니다! 지금까지 한 번의 연산으로 서로 다른 두 자리에..
[BOJ] 1405. 미친로봇 미친 로봇 성공스페셜 저지클릭시 이동합니다.어떻게 풀까? 중요한 것은 이전에 왔던 경로에 도착하지 않는 경우의 확률만 구해야 한다는 것입니다.즉, DFS를 통해서, N번을 이동하면서, 자신의 위치를 visit처리 해준 다음에, visit처리 되지 않은 방향으로만 이동합니다!그리고, 각 방향으로의 확률이 있기 때문에, 자신이 현재 도착한 위치의 확률 * 다음으로 이동할 확률을 계속 곱해가면서, 자신의 현재 위치에 대한 확률을 계속 가지고 있습니다! 그리고, N번의 이동을 완료했으면, 결과 확률에 그 확률을 더해주고, 이전 상황으로 돌아가서, 다른 방향을 탐색합니다! 그림으로 예를 들어 드리겠습니다! 처음엔 이 장소에서 시작합니다! 오른쪽으로 이동할 수 있습니다!예제에서는 오른쪽 확률이 0.25이기 때문에,..
[BOJ] 2206. 벽 부수고 이동하기 벽 부수고 이동하기 성공클릭시 이동합니다. 어떻게 풀까? 최단 경로를 구하기위해 단순한 BFS로 풀려고하면 약간의 오류가 생깁니다!바로, 벽을 부술수 있는가? 의 유무 때문이죠! 따라서, 벽을 부술수 있는지의 여부를 따로 저장하기 위해 visit 배열을 2개 사용합시다!이렇게 관리하면, 평범하게 BFS를 돌려서 만약, (n,m)에 도착하면, 그 때의 이동 횟수를 출력하면 바로 그것이 최소 거리 입니다! 사실, 이 문제는 이전에 포스팅했던 미로탈출 과 아주 유사합니다!만약, 잘 이해가 안되시면 해당 포스팅을 확인해 주세용!! 코드 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354..
[BOJ] 6603. 로또 로또클릭시 이동합니다. 어떻게 풀까? 조합 문제입니다! 심지어 숫자들도 오름차순으로 들어오기 때문에, 조합 짜는 코드만 잘 짜주시면 됩니다! 참고로, 최대 길이가 13밖에 되지 않으니, 선택했다는 것을 비트로 이용하여 나타낼 수 있습니다! 재귀 함수로 순열을 짜는 방법은 다음과 같습니다. 1. 해당 배열을 선택한다! - 이 경우에는 해당 배열을 선택했다는 select check를 해주고 다음 인덱스를 확인합니다.2. 해당 배열을 선택하지 않는다! - 이 경우에는 아무런 처리를 하지 않고 다음 인덱스를 확인합니다! 이렇게 하면, 마지막에 r이 0이 되거나, n이 r과 같아지는 경우에는 visit을 적절하게 1로 만들면서 visit을 이용하여 선택된 숫자들을 출력하면 됩니다. 코드 12345678910111..

반응형