알고리즘 Contains 시간복잡도에 대한 정보 HashMap/ArrayList

2023. 6. 29. 10:41·TechKnowledge/알고리즘

알고리즘중

값을 배열에 저장하는 로직에서

값의 존재여부를 조회할때

ArrayList 의 contain 를 사용하게 되면 
collection 매서드의 동작에서 ArrayList 의 길이 n 만큼 O(n) 만큼 순회하게된다.

이런 케이스는 많은 시간복잡도를 요구한다.

HashMap으로 치환이가능한 알고리즘이라면

HashMap의 키에 값을 넣고 키를 가지고있는지 조회하면

HashMap의 containkey 타입으로 확인을 하면

key 값의 메모리 주소를 바로 찾기 때문에 O(1) 단한번의 연산으로 끝낼수있다

import java.util.ArrayList;

public class Scartch {
    public int solution(int[] A) {
        ArrayList<Integer>arrayList = new ArrayList<>();
        for (int i=0; i<A.length; i++){
            int num = A[i];
            if (!arrayList.contains(num)){
                arrayList.add(num);
            }else {
                arrayList.remove(Integer.valueOf(num));
            }
        }
        return arrayList.get(0);
    }
}

ArrayList 의 contains 를 적용한모습

for문안에 들어가있어서 O(n^2) 의 시간복잡도

public class Scartch {
    public int solution(int[] A) {
        HashMap<Integer,Boolean>hashMap = new HashMap<>();
        for (int i=0; i<A.length; i++){
            int num = A[i];
            if (!hashMap.containsKey(num)){
                hashMap.put(num,true);
            }else {
                hashMap.remove(num);
            }
        }
        int answer=0;
        for (int a: hashMap.keySet()){
            if (hashMap.get(a)==true){
                answer=a;
            }
        }
        return answer;
    }
}

해쉬맵의 contains 키를 적용한 알고리즘이다

O(n)으로시간복잡도를 줄인 상황이다

저작자표시 (새창열림)

'TechKnowledge > 알고리즘' 카테고리의 다른 글

프로그래머스 lv2 괄호회전하기 자바(Java) Stack활용/ 올바른 괄호문제  (0) 2023.02.17
프로그래머스 lv2 멀리뛰기 자바(Java) 동적계획법/ 피보나치수열  (2) 2023.01.31
백준 2775: 부녀회장이 될테야 Java(자바) 동적계획법을 이용한 풀이  (0) 2023.01.10
최소신장트리/크루스칼 알고리즘  (0) 2023.01.04
항해 알고리즘 4일차  (0) 2022.05.17
'TechKnowledge/알고리즘' 카테고리의 다른 글
  • 프로그래머스 lv2 괄호회전하기 자바(Java) Stack활용/ 올바른 괄호문제
  • 프로그래머스 lv2 멀리뛰기 자바(Java) 동적계획법/ 피보나치수열
  • 백준 2775: 부녀회장이 될테야 Java(자바) 동적계획법을 이용한 풀이
  • 최소신장트리/크루스칼 알고리즘
김코딩개발자
김코딩개발자
  • 김코딩개발자
    김코딩의 개발로그
    김코딩개발자
  • 전체
    오늘
    어제
    • 분류 전체보기 (69)
      • 개발이야기 (19)
        • 개발로그 (7)
        • 항해일지 (11)
      • Develop (0)
      • Life (0)
      • Stack (29)
        • C++ (6)
        • Ext.js (1)
        • Spring (18)
        • Java (2)
        • JavaScript (2)
      • TechTrend (0)
      • TechKnowledge (20)
        • CS관련지식 (9)
        • 알고리즘 (9)
        • 네트워크 (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    lan 통신
    응답지연값
    직장인
    osi 2계층
    네트워크
    데이터 용량단위
    자바스크립트입문
    DB원리
    ip통신
    서비스경험
    지연수치표
    개발일기
    서비스 경험
    동시성제어
    괄호 회전하기
    시간복잡도
    데이터 마이그레이션
    프로그래머스 LV2
    SpringBoot DB
    프로그래머스
    software docs
    괄호문제
    대규모 트래픽
    개발 설계 문서
    개발입문
    프로그래머스 멀리뛰기
    올바른 괄호
    동적계획법
    개발 문서 작성방법
    관점지향프로그래밍
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
김코딩개발자
알고리즘 Contains 시간복잡도에 대한 정보 HashMap/ArrayList
상단으로

티스토리툴바