문자열 5

[BOJ] 1701. Cubeditor

KMP를 활용하는 문자열 문제이다. 이 문제를 맨처음엔 모든 문자열 패턴을 구해서 입력문자열에서 패턴을 찾는 방식으로 생각해보았다. 하지만 문자열 최대 길이가 5000이기에 모든 패턴을 구하는건 불가능했다. 그래서 생각해보니 KMP를 사용할때 접두사와 접미사를 이용하여 패턴의 길이를 구하는 pi를 활용하는 방안을 떠올렸다. 이것을 이용하면 2번이상 등자하며 최장길이를 구할 수 있게 되기에 적용해보았다. 단, abbcbba와 같은 패턴에서는 bb를 못찾기에 이것을 위해선 bbcbba를 확인해야하는 반례가 생긴다. 그래서 입력문자열의 앞에서부터 하나씩 줄여주며 pi를 구하는 방식으로 풀어보았다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ..

Algorithm 2021.07.14

[BOJ] 9935. 문자열 폭발

패턴을 찾는 문자열 문제이다. 맨처음 패턴을 찾는 문제이기에 KMP를 사용하여 접근해보았다. 하지만 KMP가 반복적으로 호출되기때문에 시간초과가 발생한다. 따라서 다른방법을 사용해보았다. 스택을 사용하여 주어진 문자열의 앞에서부터 하나씩 스택에 집어넣고, 그 후 찾아야하는 패턴보다 같거나 큰길이를 스택이 가진다면 맨뒤에 스택의 맨뒤의 문자열이 패턴문자열과 똑같은지를 찾고, 똑같다면 제거해주는 방식의 알고리즘을 사용할 수 있다. 다만, 스택은 구조상 비효율적이기에 StringBuilder를 적용하여 풀어보았다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40..

Algorithm 2021.07.13

[Programmers] 뉴스 클러스터링

자료구조를 이용하여 쉽게 풀수있는 문제이다. Map자료구조를 이용하여 교집합과 합집합을 구하는 문제이다. 만일 두문자열다 가지고 있는 원소이면 교집할일땐 min값을, 합집합일땐 max값을 주어주는 방식으로 풀었다. 문제를 꼼꼼히 읽는게 중요한것 같다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89..

Algorithm 2020.05.21

[Programmers] 비밀지도

비트연산을 이용하는 문제이다. 비트연산 | 을 이용하고 2진수로 바꿔주는 간단한 문제이다. 이문제에선 주의할점은 n의 크기만큼 문자열을 맞추기 위해 공백을 추가하는 작업이 필요한데 이작업이 없다면 테스트케이스에서 틀리는 부분이 존재한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 package programmers; public class Solution_2018카카오_비밀지도 { public static void main(String[] ..

Algorithm 2020.05.14

[SWEA] 4366. 정식이의 은행업무

문자열을 가지고 변환시키면서 모든경우를 다해보는 문제이다. 이 문제는 문자열을 가지고 진법변환을 해주고 HashMap을 사용하는 문제였다. 다만 주의할점은 문자열을 건드는 작업을 할때는 String 클래스를 이용하는 것보다 StringBuilder클래스를 이용해주는 것이 훨씬 시간적으로 이득이라는 점이다. 또한 문자열의 문자를 치환할때 StringBuilder 클래스의 setCharAt()함수를 이용해주면 이문제를 쉽게 풀수있다. 진법변환에 대해선 10진수를 다른 진수로 바꾸려면 Integer.pasrseInt(Num,N진법수) 와 같은 형태로 바꿀수 있지만 다른진수에서 10진수의 형태로 바꾸려면 직접해주는게 편할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18..

Algorithm 2020.05.02