https://www.acmicpc.net/problem/2212
2212번: 센서
첫째 줄에 센서의 개수 N(1 ≤ N ≤ 10,000), 둘째 줄에 집중국의 개수 K(1 ≤ K ≤ 1000)가 주어진다. 셋째 줄에는 N개의 센서의 좌표가 한 개의 정수로 N개 주어진다. 각 좌표 사이에는 빈 칸이 하나 있
www.acmicpc.net
문제
수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다.
이런 사실에 놀란 수빈이는 간단한 게임을 만들기로 했다. 두 문자열 S와 T가 주어졌을 때, S를 T로 바꾸는 게임이다. 문자열을 바꿀 때는 다음과 같은 두 가지 연산만 가능하다.
- 문자열의 뒤에 A를 추가한다.
- 문자열을 뒤집고 뒤에 B를 추가한다.
주어진 조건을 이용해서 S를 T로 만들 수 있는지 없는지 알아내는 프로그램을 작성하시오.
입력
첫째 줄에 S가 둘째 줄에 T가 주어진다. (1 ≤ S의 길이 ≤ 999, 2 ≤ T의 길이 ≤ 1000, S의 길이 < T의 길이)
출력
S를 T로 바꿀 수 있으면 1을 없으면 0을 출력한다.
소스코드
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));
String s = br.readLine();
String t = br.readLine();
StringBuilder sb;
while(!t.equals(s)) {
int lastIdx = t.length() - 1;
if(t.charAt(lastIdx) == 'A') t = t.substring(0, lastIdx);
else {
sb = new StringBuilder(t.substring(0, lastIdx));
t = sb.reverse().toString();
}
if(t.length() < s.length()) break;
}
if(t.length() < s.length()) System.out.println(0);
else System.out.println(1);
}
}
해결방법
S를 T로 만들 수 있으면 1을 출력, 없다면 0을 출력하면 되는 간단한 문제이다.
S를 T로 바꾸려고 한참을 생각해봤는데 방법을 모르겠어서 힌트를 봤더니 T를 S로 바꿔야 한다고 한다.
다시 생각해보니 T를 S로 바꾸는 방법은 매우 쉽다.
T의 마지막 문자가 'A'라면 'A'를 빼주면 되고, 'B'라면 'B'를 빼고 뒤집어 주기만 하면된다. 이를 T가 S와 같아질때까지 반복하면 문제는 해결된다.
'알고리즘 > 백준' 카테고리의 다른 글
10775번 : 공항 (0) | 2023.08.03 |
---|---|
13904번 : 과제 (0) | 2023.08.03 |
2212번 : 센서 (0) | 2023.08.02 |
19539번 : 사과나무 (0) | 2023.07.31 |
24938번 : 키트 분배하기 (0) | 2023.07.31 |