https://www.acmicpc.net/problem/8958
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"의 주소값이 서로 같지 않아 만족이 되지 않았던 것이다.
파이썬이 왜 상대적으로 쉬운 언어라고 했는지 요즘에서야 이해하고 있다. 자바는 정말 어렵다....
'코테' 카테고리의 다른 글
[백준 / Java] 4673번 : 셀프 넘버 (0) | 2023.02.07 |
---|---|
[백준 / Java] 4344번 : 평균은 넘겠지 (0) | 2023.02.06 |
[백준 / Java] 10818번 : 최소, 최대 (0) | 2023.02.05 |
[백준 / Python] 2108번 : 통계학 (1) | 2023.02.03 |
[백준 / Python] 9020번 : 골드바흐의 추측 (0) | 2023.02.02 |