알고리즘/백준

[파이썬, 자바] BOJ_15904(UCPC는 무엇의 약자일까?)

딱따구르리 2021. 1. 21. 16:05
728x90
반응형

문제

 

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

 

15904번: UCPC는 무엇의 약자일까?

첫 번째 줄에 알파벳 대소문자, 공백으로 구성된 문자열이 주어진다. 문자열의 길이는 최대 1,000자이다. 문자열의 맨 앞과 맨 끝에 공백이 있는 경우는 없고, 공백이 연속해서 2번 이상 주어지는

www.acmicpc.net


 

해설

 

 

입력받은 문자열을 "UCPC"로 축약할 수 있는지 묻는 문제이기 때문에 

U, C, P, C를 각각 리스트에 넣어놓고 for문을 돌려서 살펴보면 될 것 같다.

 

처음엔 해당 문자의 위치를 파악하는 코드 없이 + 반복문의 범위를 word의 길이로 진행했었는데

이렇게 하면 U, C, P, C의 순서가 뒤죽박죽 되고, UCPC로 끝나지 않고 뒤에 U, C, P, C가 또 나오면 또 담아버리는 문제가 있었다.

 

그래서 우선 반복문의 범위를 arr의 길이로 바꿔 뒤에 또 U, C, P, C가 나오더라도 딱 4번만 돌고 나면 멈추도록 하였다.

문자를 찾게 된다면 res라는 빈 문자열에 해당 문자를 넣어준다.

그리고 나선 word 문자열에서 해당 문자의 위치를 찾아서 그 다음부터 돌 수 있도록 해줘야 한다. 그렇지 않으면 U, C, P, C가 몇 번이고 res 문자열에 담길 수 있다.

4번의 반복이 끝나고 나면 res 문자열이 "UCPC"와 같은지 비교한 후 적절한 답을 출력하도록 하면 된다.

 


 

- 자바

 

자바의 경우엔 idx를 찾지 않고 하나씩 증가시켜주도록 코드를 짰다.

입력 문자열의 길이만큼 반복문을 돌게 하여 arr의 U, C, P, C와 같은 알파벳이 나올때만 idx를 증가시킨다.

최종적으로 idx의 값이 4가 되는지에 따라 적절한 답을 출력하면 된다.

 

 


코드

 

-파이썬

#백준 15904(UCPC는 무엇의 약자일까?)

arr = ['U', 'C', 'P', 'C']

word = input()  #입력 문자열
res = ""

for i in range(len(arr)):
    if arr[i] in word:
        res += arr[i]  #res에 해당 arr[i] 넣기
        idx = word.find(arr[i])  #word 문자열에서 arr[i]의 위치 찾기
        word = word[idx + 1:]  #arr[i]를 찾은 위치가 담기지 않도록

if res == "UCPC":
    print("I love UCPC")
else:
    print("I hate UCPC")

 

- 자바

//백준 15904(UCPC는 무엇의 약자일까?)
import java.util.*;
import java.io.*;

public class Boj_15904 {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		char[] arr = {'U', 'C', 'P', 'C'};
		
		String word = br.readLine();  //입력 문자열
		int idx = 0;
		
		for(int i = 0; i < word.length(); i++) {
			if(word.charAt(i) == arr[idx]) {
				idx++;
				if(idx == 4) {
					System.out.println("I love UCPC");
					return;
				}
				
			}
		}
		
		System.out.println("I hate UCPC");
	}

}
728x90
반응형