본문 바로가기
Java

[백준] 기술 연계마스터 임스

by 간장공장공차장 2024. 11. 13.
반응형
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 클래스는 이들을 모두 구현하며, 추가적인 기능도 제공한다.

  1. int length(): 문자열의 길이를 반환합니다.
  2. char charAt(int index): 특정 인덱스에 있는 문자를 반환합니다.
  3. CharSequence subSequence(int start, int end): 특정 부분 문자열을 반환합니다.
  4. 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을 통해 해결

반응형