문제 출처 - Baekjoon Online judge
문제는 여기
[문제]
UCPC는 '전국 대학생 프로그래밍 대회 동아리 연합 여름 대회'의 줄임말로 알려져있다. 하지만 이 줄임말이 정확히 어떻게 구성되었는지는 아무도 모른다. UCPC 2018을 준비하던 ntopia는 여러 사람들에게 UCPC가 정확히 무엇의 줄임말인지 물어보았지만, 아무도 정확한 답을 제시해주지 못했다. ntopia가 들은 몇 가지 답을 아래에 적어보았다.
- Union of Computer Programming Contest club contest
- Union of Computer Programming contest Club contest
- Union of Computer Programming contest club Contest
- Union of Collegiate Programming Contest club contest
- Union of Collegiate Programming contest Club contest
- Union of Collegiate Programming contest club Contest
- University Computer Programming Contest
- University Computer Programming Club contest
- University Computer Programming club Contest
- University Collegiate Programming Contest
- University CPC
- ...
ntopia는 이렇게 다양한 답을 듣고는 UCPC가 무엇의 약자인지는 아무도 모른다고 결론내렸다. 적당히 슥삭해서 UCPC를 남길 수 있으면 모두 UCPC의 약자인 것이다!
문자열이 주어지면 이 문자열을 적절히 축약해서 "UCPC"로 만들 수 있는지 확인하는 프로그램을 만들어보자.
축약이라는 것은 문자열에서 임의의 문자들을 제거하는 행동을 뜻한다. 예를 들면, "apple"에서 a와 e를 지워 "ppl"로 만들 수 있고, "University Computer Programming Contest"에서 공백과 소문자를 모두 지워 "UCPC"로 만들 수 있다.
문자열을 비교할 때는 대소문자를 구분해 정확히 비교한다. 예를 들어 "UCPC"와 "UCpC"는 다른 문자열이다. 따라서 "University Computer programming Contest"를 "UCPC"로 축약할 수 있는 방법은 없다.
그나저나 UCPC는 정말 무엇의 약자였을까? 정확히 아시는 분은 제보 부탁드립니다.
[입력]
첫 번째 줄에 알파벳 대소문자, 공백으로 구성된 문자열이 주어진다. 문자열의 길이는 최대 1,000자이다. 문자열의 맨 앞과 맨 끝에 공백이 있는 경우는 없고, 공백이 연속해서 2번 이상 주어지는 경우도 없다.
[출력]
첫 번째 줄에 입력으로 주어진 문자열을 적절히 축약해 "UCPC"로 만들 수 있으면 "I love UCPC"를 출력하고, 만들 수 없으면 "I hate UCPC"를 출력한다.
[풀이]
1. 축약을 했을 때 UCPC가 되기 위해서는 U, C, P, C가 순차적으로 나와야 한다.
2. for문을 돌려서 입력받은 문자열의 처음부터 끝까지 U, C, P, C가 순서대로 나오는지 체크한다.
3. 만약 다 있다면 "I love UCPC", 없다면 "I hate UCPC"를 출력해준다.
[접근]
1. 문제를 보고 뭔가 빠르게 해결할 방법이 없을까를 생각했다.
2. 별 생각이 나지 않아 for문으로 탐색을 하며 비교를 했다.
3. 비교 후 조건에 맞게 출력을 시켜준다.
[코드]
package BOJ_silver;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main_S5_15904 {
static char ucpc[] = {'U', 'C', 'P', 'C'};
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String sentence = br.readLine();
int index = 0;
// 문장을 비교하면서 ucpc가 있는지 체크
for (int i = 0; i < sentence.length(); i++) {
if (sentence.charAt(i) == ucpc[index])
index++;
if (index == 4) // 이미 UCPC가 다 포함되었다면 더 이상 탐색할 필요가 없다.
break;
}
if (index == 4) { // 만약 index가 4라면(UCPC가 다 포함되었다면)
System.out.println("I love UCPC");
}
else
System.out.println("I hate UCPC");
}
}
'문제 풀이 > Baekjoon' 카테고리의 다른 글
[백준] S3 18429번 근손실 (JAVA) (0) | 2021.11.20 |
---|---|
[백준] S1 17609번 회문 (JAVA) (0) | 2021.11.20 |
[백준] S3 20291번 파일 정리 (JAVA) (0) | 2021.11.17 |
[백준] S3 2012번 등수 매기기 (JAVA) (0) | 2021.11.14 |
[백준] S4 1758번 알바생 강호 (JAVA) (0) | 2021.11.13 |