최대 1 분 소요

[백준 2810번] 컵홀더

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package _1월_3주차;
 
import java.util.Scanner;
public class 백준_손수경_정답_2810 {
 
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String seat = sc.next( ); 
        String[] arraySeat = seat.split("");
        int cnt = 0;
        int ppl = 0;
        //nextLine()을 통해서 입력을 받는 경우는 Enter를 치면입력이 종료되는데 ppl을 받으면서 Enter를 치게 되어서 seat의 입력이 바로 종료됨 -> 그래서 next()를 통해서 입력을 받아야됨.
 
        for (int i = 0; i < arraySeat.length; i++) {
            if (arraySeat[i].compareTo("L"== 0) {
                i++;
                ppl++;
            }
            cnt++;
            ppl++;
        }
        //LL을 하나로 묶어서 S처럼 생각함.
        if ((cnt + 1>= ppl) { //cnt + 1 : 원래 총 컵홀더 개수
            System.out.println(ppl);
        }
        else {
            System.out.println(cnt + 1);
        }
    }
}
cs

컵홀더의 개수는 자리의 개수 + 1 이 된다. 하지만 LL같은 경우는 2명이 앉을 수 있지만 컵홀더의 개수는 2개이므로 LL을 S와 같이 하나로 봐준다. 그리고 마지막에 있는 조건문 같은 경우는 최대 놓을 수 있는 사람의 개수와 비교를 해주는 것이다. 왜냐하면 3명이 앉는데 그게 모두 SSS인 경우는 컵홀더가 4개더라도 3개의 컵만 놓을 수 있기 때문에 사람수와도 비교를 해주어야 한다.

배운점

문자열 비교를 위한 방법

  1. equals()
    str1.equals(str2)를 하게 되면 리턴값이 true/false가 된다. 여기서 대문자, 소문자 구분없이 알파벳만 같은지를 확인하기 위해서는 equalsIsIgnoreCase()를 사용해주면 된다.
  2. == (비교 연산자)
    비교 연산자는 문자열이 같지만 false를 리턴하는 경우도 있다. 그래서 내가 처음에는 비교 연산자를 통해서 문자열을 하나씩 비교하려고 했지만 조건문에 들어가지 않아서 compareTo() 를 사용하게 된 것이다. 여튼 ==같은 경우는 서로 다른 객체라면 false를 리턴하게 된다.
  3. compareTo()
    이 매서드 같은 경우는 equals와 달리 객체가 인자보다 사전적으로 앞에 있다면 양수를, 뒤에 있다면 음수를 리턴해준다.

    결론

    이 문제의 경우 같은지 다른지만 비교를 해주면 되는 문제기 때문에 equals와 compareTo 둘다 상관이 없다.

댓글남기기