전체 글(287)
-
[BOJ_3474 | Number Theory] 교수가 된 현우
풀이 문제 자체는 크게 어려운 문제는 아니었던것 같다.하지만, 풀이 과정에 따라서 시간 복잡도가 천차만별이 될 수 있다는 것을3번의 실패끝에 경험했다. 몇 자리수인지를 물어보는 것이 아니라 뒷자리에 0이 몇개가 있는지를 계산하는 문제였기 때문에비교적 간단하게 2 와 5의 개수만으로 답을 구할 수 있다. 단 이때 참고해도 될 만한 부분은 1. 2의 개수는 무조건 5의 개수보다 많으므로 굳이 2의 개수를 세느라 시간을 낭비할 필요가 없다 2. 1~N 사이의 2나 5의 배수를 탐색하는 과정에서 모든 숫자를 탐색할 필요가 없다 이 2가지 정도로 정리할 수 있겠다. 2번을 몰랐던 상황에서 1024!의 값을 구하기 위해1~1024 까지의 모든 자연수의 2, 5의 배수개수를 세고 있었고결과적으로 시간 복잡도가 증가하..
2019.01.02 -
[BOJ_4963 | DFS] 섬의 개수
풀이 전형적인 DFS문제로 보여진다.뭔가 다른 방법이 있진 않을까 해서 DFS를 사용하지 않고 풀려고도 시도해 보았지만아무래도 DFS로 문제를 해결하는 것이 더 간단해보인다. DFS란 Depth-First Search 의 약자로하나의 경로를 우선적으로 끝까지 탐색하는 알고리즘이다. 위 문제를 해결하기 위해서 1로 연결되는 경로를 DFS로 탐색하면서 그 값을 다 2로 바꾸어 준다.그럼 하나의 점에서 시작된 DFS결과는 상하좌우 대각선으로 연결된 하나의 섬을 전부 2로 바꾼 결과가 되고 아직 2로 바뀌지 않은 지점은 연결되지 않은 섬이므로 카운터의 값을 증가시킨뒤에 다시 DFS를 수행하는 방식이다.DFS에 익숙하지 않다면 이 문제를 통해 한번 연습해보는 것이 좋을 듯 하다. 크게 어렵지 않은 난이도로 DFS..
2019.01.02 -
[BOJ_6378 | while] 디지털 루트
while문의 사용에 익숙해져 있다면 해결하는데 큰 어려움을 겪지 않았을 문제였던 것 같다.스트링으로 인풋을 입력받는데0이면 인풋받는 while문을 빠져나오고스트링을 캐릭터로 파싱해서 다 더해주는 단계를 밟았다. 다 더한 Integer값이 10미만이면 바로 출력하고10보다 크다면 그때부터는 Integer를 다루는 digitalRoot함수에 집어넣어 문제를 해결하였다. 1234567891011121314151617181920212223import java.util.*;public class BOJ_6378 { public static void main(String[] args){ Scanner input = new Scanner(System.in); while(true) { String num = inpu..
2019.01.02 -
[BOJ_6603 | recursive] 로또
로또 문제는 n개에서 m개를 선택하는 경우의 수를 나열하는선택 알고리즘 문제의 일종이었던 것 같다. Lotto라는 함수를 만들어서 Divde and Conquer 방법으로 문제를 해결하는 쪽을 선택했다. 재귀 함수를 이용하였으며Lotto 라는 함수는 번호가 담겨있는 배열의 포인터와, 번호를 몇개 선택했는지를 알려주는 카운터, 배열의 번호 정보가 담긴 인덱스,그리고 주어진 로또번호의 개수, 그리고 리턴해야 할 스트링을 파라미터로 전달받는다. 재귀함수가 한번 호출될 때마다 번호가 하나씩 선택되며, 카운터가 증가하고 다음에 선택해야 할 번호의 개수가 줄어드는 식이다 예를 들면1, 2, 3, 4, 5, 6, 7 이 7개의 번호가 주어졌을 때첫번째 함수에서는1이 선택되거나 2가 선택되고 (3부터 선택하게 되면 6..
2019.01.02 -
[BOJ_5639 | Tree] 이진 검색 트리
이진 검색 트리(Binary Search Tree) 문제는 트리의 순회 결과가 주어졌을 때 트리를 유일하게 결정할 수 있는지에 대해서 물어보는 문제였던 것 같다.학교에서 배울 때는 어느 한 가지의 순회(중위 순회, 전위 순회, 후위 순회)결과를 가지고는트리를 유일하게 결정할 수 없으며 중위 순회와 전위 순회혹은 중위 순회와 후위 순회 의 결과가 주어졌을 때 트리를 유일하게 결정할 수 있다. 위 문제에서는 중위 순회 결과에 대해서는 고민할 필요가 없는데, 이진 검색트리에서 중위 순회한 결과는 오름차순의 데이터이기 때문이다 따라서 중위 순회와 전위 순회의 결과를 가지고 트리를 유일하게 구성할 수 있었고재귀 함수를 이용하여 노드 삽입과 후위 순회를 구현하여 문제를 해결하였다. 123456789101112131..
2019.01.02