알고리즘/BOJ 1235

백준 4948번 베르트랑 공준

문제 링크입니다: https://www.acmicpc.net/problem/4948 간단한 에라토스테네스의 체를 사용하여 소수를 찾는 문제였습니다.주의할 점은 입력 받은 숫자부터 시작이 아닌 (입력 받은 숫자 + 1)부터 소수의 갯수를 센다는 점입니다! #include using namespace std; const int MAX = 123456 * 2 + 1; int minFactor[MAX]; //minFactor[i] -> i의 가장 작은 소인수(i가 소수인 경우 자기 자신) //에라토스테네스의 체 void eratosthenes(void) { //1은 항상 예외 minFactor[0] = minFactor[1] = -1; //모든 숫자를 처음에는 소수로 표시 for (int i = 2; i < M..

알고리즘/BOJ 2018.07.07

백준 10798번 세로읽기

문제 링크입니다: https://www.acmicpc.net/problem/10798 생각보다 구현하기 힘든 구현 문제였습니다.코드 자체는 간단하니 코드를 참고하면 쉽게 이해가 가는 문제입니다. #include #include #include using namespace std; string word[5]; int main(void) { for (int i = 0; i > word[i]; for (int i = 0; i < 15; i++) //최대 15 글자 for (int j = 0; j < 5; j++) if (i < word[j].size()) //word[j]의 인덱스 범위 내에서만 출력 cout

알고리즘/BOJ 2018.07.07

백준 1924년 2007년

문제 링크입니다: https://www.acmicpc.net/problem/1924 간단한 구현 문제였습니다.1. 해당 달 전까지의 누적 일 수를 더합니다.2. 해당 달의 일 수를 더합니다.3. 모듈러 연산을 통해 요일을 출력합니다. #include using namespace std; int x, y; int month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int main(void) { cin >> x >> y; int day = 0; for (int i = 0; i < x; i++) day += month[i]; //우선 해당 달 전까지 누적 일 수를 더하고 day += (y - 1); //해당 달의 일 수를 더한다 switch (..

알고리즘/BOJ 2018.07.06

백준 1018번 체스판 다시 칠하기

문제 링크입니다: https://www.acmicpc.net/problem/1018 체스판은 (0,0)에 W가 오는 경우가 있고 B가 오는 경우가 있습니다.따라서 두 가지 경우의 체스판을 미리 선언해놓고 하나하나 Brute Force 방식으로 비교하면 쉽게 풀 수 있는 문제였습니다.비교하는 범위가 초과하지 않도록만 한다면 딱히 주의할 점은 없는 것 같습니다! #include #include #include using namespace std; const int INF = 987654321; const int MAX = 50; int M, N; string board[MAX]; //(0, 0)이 W인 체스보드 string whiteFirst[8] = { { "WBWBWBWB" }, { "BWBWBWBW" ..

알고리즘/BOJ 2018.07.06

백준 1720번 타일 코드

문제 링크입니다: https://www.acmicpc.net/problem/1720 백준 11727번 2*n 타일링 2(http://jaimemin.tistory.com/401)을 심화한 문제였습니다.tiling 함수 구현 자체는 똑같지만 뒤집힌 경우 좌우 대칭인 경우를 찾아내는 방법을 모색하는 것이 너무 어려웠습니다.그래서 중복되는 모양을 찾는 대신 중복되지 않는 방법을 찾았습니다.아래는 http://m.blog.daum.net/rhaoslikesan/369?tp_nil_a=2 포스팅을 참고한 내용입니다.tiling 함수를 통해 타일을 구하면 중복된 모양 + 중복된 모양 + 중복되지 않은 모양 이렇게 세 가지 경우의 수를 구할 수 있습니다.현재 문제에서 요구하는 답은 (중복된 모양 + 중복되지 않은 모..

알고리즘/BOJ 2018.07.06

백준 1695번 팰린드롬 만들기

문제 링크입니다: https://www.acmicpc.net/problem/1695 앞에서 뒤로 보나, 뒤에서 앞으로 보나 똑같은 숫자를 팰린드롬이라고 합니다.따라서, 알고리즘은 아래와 같습니다.1. arr[begin]==arr[end]라면 begin 인덱스는 하나 증가, end 인덱스는 하나 감소를 시킵니다.2. arr[begin]!=arr[end]라면 조건 충족을 위해 숫자가 하나 추가되어야 하므로 begin 인덱스만 하나 증가시키거나 end 인덱스만 하나 감소시킵니다. 이 중, 더 작은 결과를 반환합니다. #include #include #include //memset using namespace std; const int MAX = 5000; int N; int arr[MAX]; int cache..

알고리즘/BOJ 2018.07.06

백준 2580번 스도쿠

문제 링크입니다: https://www.acmicpc.net/problem/2580 흥미로운 백트래킹 문제였습니다.처음에 풀 때는 3*3 칸 내에서도 1~9가 하나씩 존재해야한다는 규칙을 잊어먹어서 틀렸습니다.3*3 칸 내 인덱스는 change2SquareIdx 함수를 통해 반환받았고 각 열, 행, 그리고 3*3 칸 내에 숫자 존재 여부를 파악하기 위해 bool 형 배열 row, col, square를 선언했습니다.스도쿠는 총 9 * 9 = 81칸이기 때문에 DFS 함수를 최초로 호출할 때 매개변수로 0을 전달하고 cnt가 81이 되면 스도쿠 판을 출력하는 식으로 코드를 작성했습니다. 주의할 점은, 스도쿠 판을 채우는 방법이 여럿인 경우는 그 중 하나만을 출력한다는 것입니다!(exit(0) 필수)*exi..

알고리즘/BOJ 2018.07.05

백준 10845번 큐

문제 링크입니다: https://www.acmicpc.net/problem/10845 오랜만에 자료구조 큐를 복습할 수 있던 문제였습니다.사실, 덱(deque)을 쓰면 훨씬 쉬운 문제였지만 문제의 의도대로 큐를 사용해서 풀었습니다.덱을 사용하면 back도 쉽게 할 수 있지만 큐는 FIFO(First In First Out) 구조이기 때문에 살짝 까다로울 수 있습니다.저 같은 경우에는 back을 출력하기 위해 (현재 큐의 사이즈 - 1)만큼 pop을 한 다음에 push를 하는 방식으로 큐를 환형큐라고 생각하면서 오른쪽으로 쉬프트했습니다. #include #include #include using namespace std; int N; int main(void) { cin >> N; queue q; for ..

알고리즘/BOJ 2018.07.04

백준 12100번 2048(Easy)

문제 링크입니다: https://www.acmicpc.net/problem/12100 핸드폰 게임인 2048을 모티브로 만든 문제이지만 게임과는 달리 한번 shift에서 이미 합체된 블록은 더 이상 합체되지 않는 점이 특징이였습니다.백준 14500번 테트로미노(http://jaimemin.tistory.com/623)처럼 브루트 포스(Brute Force)와 DFS(Depth First Search) 알고리즘을 함께 적용시켜 푸는 문제였습니다.Board를 적절히 복사해주고 원상복구해주는 것이 핵심이였습니다. #include #include using namespace std; const int MAX = 20; int N; int board[MAX][MAX]; int maxBlock; void shift..

알고리즘/BOJ 2018.07.04

백준 1107번 리모컨

문제 링크입니다: https://www.acmicpc.net/problem/1107 N=500,000까지이지만 5 6 7 8 9가 망가졌을 경우도 고려해야하기 때문에 MAX를 1,000,000+1까지 설정해야했던 문제였습니다.일차적으로 이 부분에서 틀렸던 문제이고 이차적으로는 length 함수에서 0에 대해 예외처리를 하지 않았기 때문에 틀렸던 문제였습니다.알고리즘 자체는 간단한 브루트포스였습니다.1. 기존 채널 100에서 +/- 버튼을 클릭하는 경우2. 채널을 입력하고 +/- 버튼을 클릭하는 경우 위 두 가지 경우 중 최소를 반환하는 값이 정답이였습니다. #include #include #include #include using namespace std; const int INF = 987654321;..

알고리즘/BOJ 2018.07.04