Algorithm
-
BOJ) 이모티콘알고리즘/백준 2020. 6. 29. 15:56
이모티콘 14226번: 이모티콘 영선이는 매우 기쁘기 때문에, 효빈이에게 스마일 이모티콘을 S개 보내려고 한다. 영선이는 이미 화면에 이모티콘 1개를 입력했다. 이제, 다음과 같은 3가지 연산만 사용해서 이모티콘을 S개 만�� www.acmicpc.net 풀이 푸는데 시간이 조금 걸렸다. 처음에 풀었을 때는 n이 300정도 이상일 때, 시간이 너무 오래걸려서 가지치기를 계속 해줬다. 그래서 700정도까지는 통과할 수준으로 나올 수 있는데, 1000까지는 도저히 무리였다. 이 때는, visit을 이용하지 않았다. 굳이 필요 없었다고 생각했다. 하지만, visit변수를 만들어야겠다는 생각을 했고, screen에 표시된 스마일 갯수에 대해서만 visit을 체크해줬다. 그렇게 하니까 몇가지 경우에서 틀린 답이 ..
-
BOJ) 1,2,3 더하기알고리즘/백준 2020. 6. 29. 15:49
1,2,3 더하기 9095번: 1, 2, 3 더하기 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 www.acmicpc.net 풀이 브루트 포스 문제로 입력값 n을 1, 2, 3 숫자의 합으로 나타낼 수 있는 경우의 수를 구하는 문제다. 또한, 순서가 있기 때문에, 1+1+2 와 1+2+1은 다른 것으로 간주한다. 예전에 풀었던 문제인데, 기억에 남아있지 않아서 새롭게 풀었다. 먼저, 예전에 풀었던 방식은 점화식을 통해서 답을 찾았었다. dn = dn-3 + dn-2 + dn-1 이라는 식이 나와서..
-
BOJ) 로마 숫자 만들기알고리즘/백준 2020. 6. 26. 15:51
로마 숫자 만들기 16922번: 로마 숫자 만들기 2, 6, 10, 11, 15, 20, 51, 55, 60, 100을 만들 수 있다. www.acmicpc.net 풀이 Brute force 문제를 푼지 오래된 것 같아서 도전했다. n=20이기 때문에, 통과하려면 가지치기를 어떻게 해야하나 많은 고민을 해봤다. 질문 탭에도 게시글이 몇 개 없어서, 참고할 수도 없었다. 그래서, 처음 선택한 방법은 로마 숫자 1,5,10,50을 n만큼 2차원 배열을 만들어서 각 숫자가 0~n까지 반복하면 만들어지는 숫자를 저장했다. 이후에, 해당 숫자를 선택하면서 count를 i개 씩 줄여줬는데, 고작 해봐야 13 -> 14 정도까지만 구할 수 있었다. 어떻게 해야하나 고민하다가 Set에서 visit으로 바꿔주었다. 어차..
-
BOJ) 숨바꼭질알고리즘/백준 2020. 6. 26. 15:45
숨바꼭질 1697번: 숨바꼭질 문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 www.acmicpc.net 풀이 가장 빠른 step에서 위치를 찾아야하기 때문에, step에 따라 우선순위 큐를 이용해야한다고 생각했다. 그래서 class spot을 만들어서 Comaparable을 implement해서 사용했었는데, 63%에서 계속 틀렸다. 설마 step에 따라서가 아닌가 싶어서 Queue로 바꿔서 제출해봤는데 63%에서 틀렸다. 결론은, 로직 자제가 틀렸던 것이다. 더불어, 우선순위 큐가 필요가 없던 것이다. 우선순위를 체크안해도 된..
-
BOJ) 요세푸스 문제알고리즘/백준 2020. 6. 25. 17:14
요세푸스 문제 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 풀이 쉽게 봤던 문제였는데, 푸는데 약간의 시간이 들었다. 이미 테이블에서 빼낸 사람을 건너 뛰면서 k번 째 사람을 빼내야 하는 문제에서, 여러 명이 빠져있는 경우에 새롭게 빼내야하는 사람을 어떻게 구해야하는지 생각하는데 시간이 조금 걸렸다. 그래서 결국, k번 째 까지 갈 때, 이미 빠져있는 사람이 있으면 총 가야하는 횟수에 +1을 증가시키면서 자리를 탐색했다. 맞기는 했지만, 배열을 이용해서 하니까 탐색 시간이 너무 많이 걸렸다. 그래서 List로 바꿔서 풀어보기로 했다. List에서 k번 째 있는 사람을 빼내는 동시에 list에서 제..
-
BOJ) 손익분기점알고리즘/백준 2020. 6. 25. 17:09
손익분기점 1712번: 손익분기점 월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 www.acmicpc.net 풀이 최근 제출된 문제에 많이 떠서, 문제를 몇 번 대충 봤는데 단순한 수식문제라 안풀려고 했다. 하지만, 오늘 정답 비율을 봤는데 23% 정도밖에 되지 않아서 뭔가 다른 생각해야하는 점이 있지 않을까 싶어서 풀어봤다. 손익분기점을 구하는 수식은 Price*N > 고정 비용 + 가변 비용 *N 이라는 식이 나온다. Price*N = 고정비용 + 가변비용*N 으로 부터 나온 N에 +1을 해주면 답이 된다는 말이다. 답을 구해야하는 N에 대해 모두 이항시키면,..
-
BOJ) 01타일알고리즘/백준 2020. 6. 25. 17:04
01타일 1904번: 01타일 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이�� www.acmicpc.net 풀이 처음 문제를 봤을 때는 순서를 모두 구해주어야 한다고 생각했다. 그래서 처음 로직은 for문을 돌리면서 0타일이 n이하까지 2개씩 증가시키면서, 1타일은 n-0타일의 수 를 통해 각각 타일의 수를 구해주었다. 그리고 0타일은 2개를 1개로 인식해야하기 때문에, /2를 해주었다. 0타일의 갯수 : ZERO 1타일의 갯수 : ONE total = ZERO + ONE 위의 변수를 가지고 따지면, total! / ZERO! / ONE! ( ! = 팩토리얼)..
-
BOJ) 베르트랑 공준알고리즘/백준 2020. 6. 24. 17:11
베르트랑 공준 4948번: 베르트랑 공준 문제 베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 �� www.acmicpc.net 풀이 에라토네스의 채를 확실히 익혔는지 확인하려고 풀었다. 방법은 바로 이전 포스팅과 같기 때문에 딱히 포스팅할 말은 없다. 에라토네스 채는 자신의 배수에 대해서 소수가 아님을 체크해주는 방식이다. 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class FindPrimeNums_4948 { final..