본문 바로가기

반응형

알고리즘

(104)
[삼성 기출 문제] 백준 14499 주사위 굴리기 문제 링크 어떻게 풀까? 시뮬레이션 문제입니다! 문제의 순서를 정확히 파악해서 문제가 요구하는 데로 구현하면 종료됩니다! 특히, 주사위가 돌아갈 때마다 주사위의 면이 어떻게 변하는지, 맵은 어떻게 변하는지를 잘 조절하시면 됩니다! 정육면체가 위, 아래, 왼쪽, 오른쪽으로 이동할때마다 면이 어떻게 변하는지를 switch 문으로 구분해 줍니다. 위나 아래로 굴러갈때에는 아래 그림 처럼 4개의 면을 순서대로 이동하면 되고, 오른쪽이나 왼쪽으로 굴러갈때에는 아래 그림처럼 4개의 면을 순서대로 이동하면 됩니다! 이렇게 회전한 뒤에 맵의 면이 0일 경우와 아닐 경우를 구분해서 주사위 면의 바닥과 맵의 값을 변경해 주시면 됩니다!그리고 주사위의 윗면에 적힌 수를 출력하면 되죠! 다만, 맵의 경계 밖이라면 함수에서 리..
[삼성 기출 문제] 백준 3190 뱀 문제 링크 클릭시 이동합니다! 어떻게 풀까? 대표적인 시뮬레이션 문제입니다.시뮬레이션에서 가장 중요한 것은 순서를 아주 잘 파악해야 한다는 것입니다. 이 문제의 경우에는 순서가 다음과 같습니다. 1. 몸길이를 늘린다.2. 사과가 있으면 사과가 없어지고, 꼬리는 움직이지 않는다.3. 사과가 없다면 몸길이를 줄여서 꼬리가 위치한 칸을 한 칸 비운다. 입니다. 위에 안나와 있어서 햇갈리는 부분은 바로 머리의 회전 입니다. 입력에서 보면, 머리 회전에 관해서 X와 C가 나오는 것을 볼 수 있습니다.그리고, X가 끝난 후에 회전하는 것을 알 수 있습니다! 죽는것은, 벽에 닿거나 뱀의 몸에 닿는 경우이죠. 즉, 모든 조건을 추가하면, 1. 몸길이를 늘린다.2. 사과가 있으면 사과가 없어지고, 꼬리는 움직이지 않는다..
[삼성 기출 문제] 백준 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] 5622. 다이얼 문제 링크 어떻게 풀까? 단순한 구현문제입니다! 알파벳이 입력되었을때, 해당 알파벳에 해당하는 시간으로 변환해주는 배열을 만들면 쉽게 해결할 수 있습니다! 예를 들면, t['A'] = 3, t['B'] = 3, ... 이렇게 저장해놓으면, UNUCIC 가 들어왔을 때 쉽게 이 문자열을 숫자로 변환해서 더해줄 수 있습니다! 코드 12345678910111213141516171819202122232425262728293031323334#include#include using namespace std; int conv[256];char nums[16]; int main() { for (int i = 0; i > nums; int len = strlen(nums); int t = 0; for (int i = 0..
[BOJ] 12782. 비트 우정지수 비트 우정지수 클릭시 이동합니다! 어떻게 풀까? 할 수 있는 연산은 2개 입니다! 1. 두 수의 위치를 바꾼다.2. 한 수의 비트를 바꾼다. 두 수의 위치를 바꿀 수 있다는 것은, 한 번의 연산으로 두 개의 수를 동시에 고칠 수 있다는 가능성을 가지고 있다는 것이죠. 한 번에 두 수의 비트를 옳게 바꾸는 방법은 무엇일까요!? 만약 바꾸고자 하는 두 수가 같다면, 연산의 의미가 없습니다. 만약, 바꾸고자 하는 두 수의 비트가 다르다고 하더라도, 이미 제대로 된 짝을 가지고 있다면, 바꾸는 의미가 없습니다. 즉, 한 번의 연산으로 두 개의 비트를 똑같게 만들고 싶다면, 위처럼 서로 짝이 맞지 않으면서, 서로 다른 비트를 가지는 두 비트의 자리를 바꿔야 합니다! 지금까지 한 번의 연산으로 서로 다른 두 자리에..

반응형