Notice
Recent Posts
Recent Comments
Link
HwangHub
[코드트리/자바] NM.시뮬2.만나는 그 순간 본문
풀이
package 코드트리.시뮬레이션.배열기록;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.stream.IntStream;
public class 만나는순간 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
List<Integer> aList = new ArrayList<>();
List<Integer> bList = new ArrayList<>();
String d;
int t;
int idx = 0;
int jdx = 0;
// initialize lists
aList.add(0);
bList.add(0);
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
d = st.nextToken();
t = Integer.parseInt(st.nextToken());
if (d.equals("R")) {
for (int j = 0; j < t; j++) {
aList.add(aList.get(idx++) + 1);
}
} else {
for (int j = 0; j < t; j++) {
aList.add(aList.get(idx++) - 1);
}
}
}
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
d = st.nextToken();
t = Integer.parseInt(st.nextToken());
if (d.equals("R")) {
for (int j = 0; j < t; j++) {
bList.add(bList.get(jdx++) + 1);
}
} else {
for (int j = 0; j < t; j++) {
bList.add(bList.get(jdx++) - 1);
}
}
}
br.close();
boolean isNoAns = true;
for (int i = 1; i < aList.size(); i++) {
if (aList.get(i).equals(bList.get(i))) { // edited
System.out.println(i);
isNoAns = false;
break;
}
}
if (isNoAns) {
System.out.println(-1);
}
}
}
위 로직 중에서 //edited로 표시된 부분이 원래 aList.get(i) == bList.get(i) 로 표시되어 있었다. 하지만 위의 list는 제네릭 클래스타입이고, 위 코드에서는 Integer라는 wrapper class를 갖고 있으므로 엄연히 int와는 다른 개념이다.
레퍼런스 타입을 ==로 비교하는 것은 의도와 다르게 흘러갈 경우가 많다. 결국은 값 비교가 아니라 주소 비교를 하고 있는 거고, 이는 우연하게도 그 할당된 값이 유사할 수 있으나, 값이 똑같아도 주소값이 다를 수 있는 경우는 상당히 많으므로 주의가 필요하다.
교훈 : List에 wrapper class 등의 클래스 타입을 넣어서 활용할거면 동등 비교시 .equals()를 사용하자.
참조 : https://coding-factory.tistory.com/536
[Java] 문자열 비교하기 == , equals() 의 차이점
Java에서 int와 boolean과 같은 일반적인 데이터 타입의 비교는 ==이라는 연산자를 사용하여 비교합니다. 하지만 String처럼 Class의 값을 비교할때는 ==이 아닌 equals()라는 메소드를 사용하여 비교를 합
coding-factory.tistory.com
'workspace > 알고리즘' 카테고리의 다른 글
[완전탐색/자바] 코드트리. 가장 가까운 두 점 사이의 거리 (0) | 2023.07.21 |
---|---|
[자바/완전탐색] CodeTree. 밭의 넓이를 고르게 하기 (0) | 2023.07.19 |
[코드트리/자바] mid.simulation1.잔해물을 덮기 위한 사각형의 최소 넓이 (0) | 2023.07.11 |
[정렬/Java] 코드트리 : 원점부터의 거리 (0) | 2023.07.05 |
[Binary Search/자바] 백준 1920. 수 찾기 (0) | 2023.05.31 |
Comments