[백준 2810번] 컵홀더
[백준 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개의 컵만 놓을 수 있기 때문에 사람수와도 비교를 해주어야 한다.
배운점
문자열 비교를 위한 방법
- equals()
str1.equals(str2)를 하게 되면 리턴값이 true/false가 된다. 여기서 대문자, 소문자 구분없이 알파벳만 같은지를 확인하기 위해서는 equalsIsIgnoreCase()를 사용해주면 된다. - == (비교 연산자)
비교 연산자는 문자열이 같지만 false를 리턴하는 경우도 있다. 그래서 내가 처음에는 비교 연산자를 통해서 문자열을 하나씩 비교하려고 했지만 조건문에 들어가지 않아서 compareTo() 를 사용하게 된 것이다. 여튼 ==같은 경우는 서로 다른 객체라면 false를 리턴하게 된다. - compareTo()
이 매서드 같은 경우는 equals와 달리 객체가 인자보다 사전적으로 앞에 있다면 양수를, 뒤에 있다면 음수를 리턴해준다.
결론
이 문제의 경우 같은지 다른지만 비교를 해주면 되는 문제기 때문에 equals와 compareTo 둘다 상관이 없다.
댓글남기기