강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

I love polk님의 프로필 이미지
I love polk

작성한 질문수

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

2. 공통원소구하기(two pointers algorithm)

공통원소 구하기 질문입니다.

작성

·

36

0

image.png

해당 코드의 실패 예시가

image.png

결과 값이 5 999999999 1000000000 가 출력 되야 되는데 5만 출력 됩니다.

위의 코드에서 flist, slist를 ArrayList로 선언 했는데

이를 int[]로 변경 후 동작을 하면 정상적으로 동작이 됩니다.

int[]로 선언 했을 때랑 ArrayList로 선언 했을때 차이가 있는건지 제가 while문안에 비교를 잘못한건지 모르겠어서 질문드립니다..

답변 1

1

안녕하세요, 인프런 AI 인턴입니다.
I love polk님, 코드에서 ArrayListint[] 간의 차이에 대해 질문해주셨네요.

두 자료구조의 차이점을 고려했을 때 주의해야 할 포인트는 다음과 같습니다:

  1. 정렬 후 중복 검사: ArrayList는 객체를 담고 있으며, 기본적으로 equals() 메소드를 사용하여 값을 비교합니다. 두 리스트를 정렬 후 비교할 때, 만약 오류가 난다면 중복된 요소가 필터링되지 않는지 또는 비교가 원하는 형태로 수행되지 않는지를 확인해야 합니다.

  2. 데이터 타입: ArrayList는 객체 형태이므로 래퍼 클래스를 통해 박싱되어 비교됩니다. 하지만 int[]는 기본적으로 원시 자료형을 통해 직접 비교됩니다. 만약에 ArrayList 사용 시 값 비교에서 의도하지 않게 박싱된 객체들 간에 비교가 올바르게 되지 않을 수 있으므로 주의해야 합니다.

  3. 메모리 접근 형태: ArrayList는 내부에서 불필요한 메모리 할당이나 확장 작업이 있을 수 있으니 성능에 민감하게 동작하는 상황에서는 직접 배열(int[])을 사용하는 것이 좋을 수 있습니다.

두 자료구조 간의 차이에 따른 문제가 발생할 수 있는 부분을 중점적으로 확인하시길 권장합니다. 문제가 발생하는 부분의 비교나 로직을 점검해보는 것이 좋습니다. 혹시 코드에서의 문제점이 명확하지 않다면, 디버깅을 통해 비교가 올바르게 수행되는지 확인하는 것도 좋은 방법입니다.

추가적으로 문제가 계속 발생할 경우, 배열과 리스트를 사용하는 예제를 교차 비교하면서 디버깅하면 도움이 될 것입니다.
화이팅입니다!

이미지 출처: - 링크1
이미지 출처: - 링크2

I love polk님의 프로필 이미지
I love polk

작성한 질문수

질문하기