목록코테 (7)
시간이 NullNull
java 트라이 알고리즘, Trie 알고리즘 등등으로 검색해서 오신 분들은 귀찮더라도 개념 자체는 다른 분들이 친절하게 그림까지 다 그려가면서 설명을 잘 해놓았기 때문에 다른 분들 글과 그림을 보면서 설명을 듣고 오시길 바랍니다! 사실 저도 엄청 검색을 해보고 많은 글을 보고 했었는데 먼가 진짜 쉽게 짜놓은 트라이 알고리즘은 없어서 이 새벽에 미친 듯이 고민해가며 트라이를 짜왔습니다. 문제는 SW Expert에 문자열 교집합이라는 문제를 참고로 하였고 사실 이 문제는 트라이로 풀면 메모리가 오버되어 절대로 풀 수가 없습니다. ㅎ.... 이거 때문에 왜 런타임 에러일까 하면서 한참을 고민했네요 B형을 준비하시는 분들은 LinkedList를 구현하는 것을 먼저 보고 오시길 추천드리며 LinkedList를 아..
문자열 P는 스스로를 계속 복제해서 매우 긴 문자열이 되었다. 복제하는 방법은 다음과 같다. P0 = “0” Pi+1 = Pi + “0” + f(g(Pi)) 여기서, f(A) 함수는 문자열 A의 모든 문자를 반전시킨다. 예를 들어서, f(“10110”) = “01001”이다. g(A)함수는 문자열 A를 좌우 반전 시킨다. 예를 들어서, g(“10110”) = “01101” 이다. 위와 같은 복제 방법을 무한히 반복한 문자열 P의 K번째 문자가 무엇인지 구하여라. P1 = “001” P2 = “0010011” P3 = “001001100011011” 위와 같이 복제가 이루어질 것이다. 따라서 3번째 문자는 1, 7번째 문자는 1, 10번째 문자는 0이다. 이 문제는 문자들의 규칙을 보고 점화식만 세워서 ..
숫자는 다양성을 가지고 있다. 다양성이란, 숫자를 구성하는 수의 종류를 의미한다. 예를 들어서 1512 라는 숫자는 ‘1’, ‘5’, ‘2’로 구성되어 있기 때문에 다양성이 3이다. 숫자가 주어졌을 때 그 숫자의 다양성을 구하는 프로그램을 작성하라. 이 문제의 경우 단순하게 다양성이 최소 1 ~ 10이란 것을 알 수 있다. 이를 이용하여 boolean[] 배열 10개를 만들어서 아직 숫자가 나오지 않았을 경우( boolean 배열의 값이 false 인 경우 ) cnt를 증가시키면 된다. 이를 코드로 나타내면 간단하게 다음과 같이 나온다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader..

048이라는 추억의 게임을 아는가? 2048은 한 때 유명했던 1인용 게임으로, 격자 위에서 숫자가 적힌 타일들을 밀어서 합치고 최종적으로 2048을 만들어 내는 것이 목표인 게임이다. 한번 타일을 밀 때는 상하좌우를 정해서 밀어야 한다. 방향을 정하면 격자 위에 있는 모든 타일이 그 방향으로 밀린다. 만약 어떤 타일이 밀리는 방향에 다른 타일이 있고, 두 타일에 적힌 숫자가 같다면 두 타일은 합쳐져 새로운 하나의 타일이 되고 이 타일에 적힌 숫자는 합쳐진 숫자들의 합이 된다. 이렇게 합쳐져서 만들어진 새로운 타일은 숫자가 같은 다른 타일이 밀려와도 합쳐져서는 안 된다. 만약 같은 숫자가 적힌 타일이 세 개 이상 있을 때는 헷갈리는 경우를 없애기 위해 빨리 벽에 닿게 될 타일을 먼저 민다고 생각한다. 예..
앨리스와 토끼는 덧셈을 이용한 간단한 게임을 같이 하기로 했다. 먼저 어떤 양의 정수를 하나 정해 그 수로 게임을 시작한다. 둘은 서로의 차례에 인접한 두 자리를 선택하고, 이 두 자리를 선택된 두 숫자의 합으로 교체하여 상대에게 차례를 넘긴다. 예를 들어, “1234”의 십의 자리와 백의 자리를 선택하면 다음 차례에는 수가 “154”가 된다. “5678”의 십의 자리와 백의 자리를 선택하면 다음 차례에는 수가 “5138”이 된다. 이렇게 차례를 반복 하다가 자기 차례에 넘어온 수가 한 자리가 되면 그 사람이 패배하게 된다. 게임을 시작할 때의 정수가 주어진다. 앨리스가 먼저 차례를 가지고, 서로 최선을 다해 게임을 한다고 할 때 어떤 사람이 게임에서 승리하게 될 것인지 구하는 프로그램을 작성하라. 이 ..