[백준 / Java] 8958번 : OX퀴즈

개발자가 되고 싶어요 ㅣ 2023. 2. 6. 01:48

https://www.acmicpc.net/problem/8958

 

8958번: OX퀴즈

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수

www.acmicpc.net

 


 


 

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
import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
 
        String[] oxList;
 
        int n = sc.nextInt();
 
        for (int i = 0; i < n; i++) {
            String ox = sc.next();
            int score = 0;
            oxList = ox.split("");
 
            String k = "z";
            int w = 0;
            for (String j : oxList) {
                if (j.equals("X")) {
                    w = 0;
                    continue;
                }
                w += 1;
                if (j.equals("O")) {
                    score += w;
                }
            }
            System.out.println(score);
        }
    }
}
cs

처음엔 반복문 안 조건에 (j == "X")로 작성했었다. 근데 j가 X임에도 불구하고 조건문에 안들어가고 그대로 순회하길래 열심히 구글링을 해봤다. 그랬더니 자바에서 String 비교는 무조건 equals를 쓴다고 한다. 이유가 궁금해졌다.

 

자바에서 == 는 두 개 대상의 주소값을 비교해주고, equals는 두 개 대상의 값 자체 만을 비교해준다고 한다.

쉽게 말하면 (j == "X")에서 j의 값 자체가 "X"라 하더라도 리스트를 순회하며 나온 j의 "X"와 직접 선언한 "X"의 주소값이 서로 같지 않아 만족이 되지 않았던 것이다.

 

파이썬이 왜 상대적으로 쉬운 언어라고 했는지 요즘에서야 이해하고 있다.  자바는 정말 어렵다....