import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static int countSkills() throws IOException {
int answer = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int length = Integer.parseInt(br.readLine());
String str = br.readLine();
String intString = "123456789";
Stack<Character> l_stack = new Stack<>();
Stack<Character> s_stack = new Stack<>();
//L-R, S-K
for (int i = 0; i < length ; i++) {
if (intString.contains(String.valueOf(str.charAt(i)))) {
answer++;
}
if(str.charAt(i) == 'L'){
l_stack.push('L');
}
if(str.charAt(i) == 'R'){
if(l_stack.size() == 0){
return answer;
}
l_stack.pop();
answer++;
}
if(str.charAt(i) == 'S'){
s_stack.push('S');
}
if(str.charAt(i) == 'K'){
if(s_stack.size() == 0){
return answer;
}
s_stack.pop();
answer++;
}
}
return answer;
}
public static void main(String[] args) throws IOException {
int result = countSkills();
System.out.println(result);
}
}
TIL
✅ contains(charsequence)
- CharSequence란?
CharSequence는 Java에서 문자열을 나타내기 위한 인터페이스로, String의 상위 타입
CharSequence 자체는 문자열이 아니지만, 이를 구현하는 클래스들이 문자열을 다루는 데 필요한 공통 메서드를 제공한다.
Java에서는 여러 클래스가 CharSequence 인터페이스를 구현하고 있으며, 그 중 가장 흔한 것이 String
이 외에도 StringBuilder, StringBuffer, CharBuffer 등이 있음
- CharSequence와 String의 관계
CharSequence: 문자열을 표현하는데 필요한 최소한의 메서드들이 정의된 인터페이스로, 문자 시퀀스(문자열)를 다루기 위한 공통된 방법을 제공한다.
String: CharSequence를 구현한 대표적인 클래스
불변(immutable) 문자열을 다루며, CharSequence의 기능을 포함해 문자열에 관련된 다양한 기능을 추가로 제공한다.
- CharSequence의 주요 메서드
CharSequence 인터페이스에는 다음과 같은 메서드가 있다. String 클래스는 이들을 모두 구현하며, 추가적인 기능도 제공한다.
- int length(): 문자열의 길이를 반환합니다.
- char charAt(int index): 특정 인덱스에 있는 문자를 반환합니다.
- CharSequence subSequence(int start, int end): 특정 부분 문자열을 반환합니다.
- String toString(): CharSequence를 String 형태로 반환합니다.
public class CharSequenceExample {
public static void main(String[] args) {
CharSequence seq = "Hello, World!"; // String이 CharSequence를 구현하므로 할당 가능
System.out.println("길이: " + seq.length());
System.out.println("인덱스 1 문자: " + seq.charAt(1));
System.out.println("부분 문자열: " + seq.subSequence(0, 5));
System.out.println("문자열: " + seq.toString());
}
}
Java의 String.contains() 메서드는 매개변수로 CharSequence를 받도록 설계되어 있어서, 개별 문자(char)를 직접 인수로 사용할 수 없다.
따라서 단일 문자인 char를 contains 메서드에서 사용하고 싶다면, String.valueOf(char)를 사용해 해당 문자를 문자열로 변환할 수 있습니다. 이 방법을 통해 contains 메서드를 사용할 수 있습니다.
String str = "Hello";
char ch = 'e';
// char를 문자열로 변환하여 contains에 전달
if (str.contains(String.valueOf(ch))) {
System.out.println("문자가 포함되어 있습니다.");
} else {
System.out.println("문자가 포함되어 있지 않습니다.");
}
이 문제에서 Stack을 사용한 이유
처음에는 if로 구분해서 L-R , S-K 순차적으로 들어오는 경우만 answer이 증가하도록 구현
그러나 사전 기술이 연속으로 들어오는 경우 처리하기 어려움 --> Stack을 통해 해결
'Java' 카테고리의 다른 글
[java] type 변경 함수 정리 (1) | 2024.11.15 |
---|---|
[백준] 식당 입구 대기 줄 성공 (1) | 2024.11.14 |
[java] 문자열 나누기 (1) | 2024.10.30 |
[java] 크기가 작은 부분 문자열 (0) | 2024.10.29 |
[java] for문을 통해 string 문자열 순회하기 (0) | 2024.10.28 |