알고리즘

[boj11140/Java] LOL

IT 참다랑어 2023. 7. 17. 09:27

https://www.acmicpc.net/problem/11140

 

11140번: LOL

당신 친구 지민이는 지금 할 일이 없다. 그리고 매우 심심하다. 그래서 쓸데없는 짓으로 시간을 때우려고 한다. 그래서 단어 하나가 주어질 때 단어에 'lol'이 들어가도록 글자를 추가하거나 변경

www.acmicpc.net

위의 문제를 풀기 위해서 일정 패턴을 인식하고 그에 따른 처리 횟수를 출력하는 방법을 생각했다.

여기서 케이스는 문자열에

1) "lol" 자체가 포함되어 있는 경우 -> 추가적으로 처리할 필요 없음(0)

2) "lo", "ol", "ll", "l_l"과 같이 하나만 추가해서 "lol"을 만들 수 있는 경우 -> 추가 또는 수정만 진행(1)

3) "l"또는 "o"가 포함되어 있는 경우 -> 2개 추가

4) 아무것도 포함되어 있지 않은 경우 -> 3개 추가

이렇게 4개로 분류할 수 있다.

lo_l과 같이 lol 사이에 문자가 하나 끼여있는 경우는 삭제가 아니라 l을 하나 추가하는 것과 같기 때문에 2번 케이스로 분류될 수 있다. 

 

위의 케이스 분류를 이용해서 문제를 해결하기 위해서 String 클래스의 contains와 matches 함수를 이용해 다음과 같은 코드를 작성하였다.

String class의 matches 함수는 java.util.regex.Pattern의 matches 함수와 동일한 결과를 나타낼 수 있지만 더 간단하게 코드를 작성할 수 있다는 것이 장점이라고 생각했다. 하지만 matches 함수는 인자로 전달된 패턴을 Pattern으로 complie하고 이를 한번만 사용하고 재사용할 수 없기 때문에, 계속해서 비교를 재사용해야하는 경우 Pattern 클래스를 사용하여 코드를 작성하는 것이 성능적인 면에서는 더 앞선다고 이야기할 수 있다.

contains 함수는 String 클래스의 indexOf 함수를 실행하고, 일정 문자열이 포함되어 있다면 indexOf는 그 위치를 반환하기 때문에 그 결과를 가지고 포함여부를 boolean 값으로 반환하는 함수이다. 빠른 속도를 위해서는 contains 대신 str.indexOf(pat) != -1 과 같이 표현할수도 있다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int T = Integer.parseInt(br.readLine());
		
		for(int tc = 1; tc <= T; tc++) {
			String text = br.readLine();
			
			if(text.contains("lol")) {
				System.out.println(0);
			}
			else if(text.contains("lo") || text.contains("ol") || text.contains("ll")|| text.matches(".*l[a-np-z]l.*")) {
				System.out.println(1);
			}
			else if(text.contains("l") || text.contains("o")) {
				System.out.println(2);
			}
			else {
				System.out.println(3);
			}
		}

	}

}

 

'알고리즘' 카테고리의 다른 글

[boj2607/Java] 비슷한 단어  (0) 2023.07.17
[boj6884/Java] 소수 부분 수열  (0) 2023.07.17
[boj2075/c++] N번째 큰 수  (0) 2023.05.05
[boj2599/c++] 짝 정하기  (1) 2023.05.05
[boj11728/c++] 배열 합치기  (0) 2023.05.04