시뮬레이션 65

백준 1443번 망가진 계산기

문제 링크입니다: https://www.acmicpc.net/problem/1443 얼핏 봐서는 매우 쉬운 문제이지만 방문 처리가 까다로울 수 있는 문제입니다. 알고리즘은 간단합니다.1. 1부터 시작해서 2 ~ 9를 P번 곱합니다. 즉, 결과는 8^P개가 나올 수 있다는 뜻!2. 따라서, 적절히 가지치기를 해줘야합니다.i) 자릿수가 D를 넘어가는 경우ii) cnt번 연산했을 때 똑같은 값이 나온 경우가 있는 경우3. 하지만, boolean 배열을 [1,000,000,000][30]는 크기가 너무 크기 때문에 선언할 수 없습니다.-> 따라서, map을 이용하여 저장합니다.4. 초기에 maxNum을 -1로 초기화하고 maxNumber 함수를 호출한 뒤 maxNum을 출력해주면 됩니다. #include #in..

알고리즘/BOJ 2018.09.20

백준 14927번 전구 끄기

문제 링크입니다: https://www.acmicpc.net/problem/14927 ssangba55(https://blog.naver.com/pasdfq/221206211990)님의 풀이를 보고 푼 문제입니다. 알고리즘은 아래와 같습니다.1. 첫 행의 경우 모든 경우의 수를 고려해줍니다.(2^N가지의 전구 상태)2. 두 번째 행부터 바로 위 행의 전구를 끄도록 스위치를 누릅니다.3. 위와 같이 진행할 경우 1~(N-1)행의 전구는 모두 꺼져있습니다. 따라서 마지막 행의 전구가 모두 꺼져 있을 경우 모든 전구가 꺼져있다고 할 수 있습니다. 전구의 상태를 쉽게 표현하기 위해 행에 대해 일차원 배열로 선언하고 각 행의 상태를 비트마스킹을 통해 표현했습니다.전구를 끄는 pressSwitch 함수는 쉽게 구현..

알고리즘/BOJ 2018.07.13

백준 3043번 장난감 탱크

문제 링크입니다: https://www.acmicpc.net/problem/3043 문제에서 요구하는 조건은 각각의 행과 열에 오직 하나의 탱크를 배치하는 것입니다.따라서, 탱크를 상하로 먼저 움직인 뒤 좌우로 움직여주면 조건을 충족시킬 수 있습니다.탱크를 움직이는 기준은 아래와 같습니다.1. 상하로 움직일 경우 y를 기준으로 정렬한 뒤 1 ~ N까지 반복문을 돌리면서 y가 해당 칸보다 아래에 있으면 위로 가야하고 해당 칸보다 위에 있으면 아래로 움직여줘야합니다.2. 좌우로 움직일 경우도 마찬가지로 x를 기준으로 정렬한 뒤 1~N까지 반복문을 돌리면서 x가 해당 칸보다 오른쪽에 있으면 왼쪽으로 가야하고 왼쪽에 있으면 오른쪽으로 움직여줘야합니다. ssangba55(https://blog.naver.com/..

알고리즘/BOJ 2018.07.09

백준 1057번 토너먼트

문제 링크입니다: https://www.acmicpc.net/problem/1057 간단한 수학 문제였습니다.라운드가 올라갈때마다 자신의 번호는 (자신의 번호 + 1)/2가 됩니다.따라서 두 경쟁자 모두 2로 나누었을 때 똑같은 위치에 있다면 해당 라운드에서 경쟁하게 됩니다. #include using namespace std; int N; int competitor1, competitor2; int getRound(void) { int round = 1; while (N) { //서로 인접해있다면 break if ((competitor1 + 1) / 2 == (competitor2 + 1) / 2) break; //라운드가 올라갈수록 idx는 반이 된다 competitor1 = (competitor1 ..

알고리즘/BOJ 2018.05.07