https://school.programmers.co.kr/learn/courses/30/lessons/178871
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
파이썬으로만 알고리즘을 풀다보니 같은 로직을 자바에서는 어떻게 구현해야할지 몰라, 기초 단계부터 다시 공부하고 있습니다.
달리기 경주는 학생들의 리스트가 주어지고, 이름이 불려지면 불려진 학생의 인덱스와 그 이전의 인덱스 값을 교환하는 간단한 문제입니다.

프로그래머스에서 바로 구현을 하니, 아이패드에서도 블루투스 키보드 하나로 바로 코딩 문제를 풀 수 있어 매우 행복합니다
아이패드를 살까 말까 고민했었는데, 정말 개발자라면 무조건 사시는 걸 추천합니다 가지고 다니는 것도 훨씬 편하고, 생각 날 때마다 알고리즘 문제를 풀 수 있는 장점이 있습니다.
해당 문제는 호명한 이름의 인덱스 값을 찾는 과정에서 시간이 매우 오래 걸리게 됩니다.
총 100만번 인덱스를 찾아야하는데, 길이가 5만인 배열이니 인덱스를 찾는데에만 100만 * 5만번이나 연산을 수행하니 말이죠.
그래서 딕셔너리가 필요한데, 자바에서는 딕셔너리를 Map 이라는 자료구조를 이용해 구현합니다.
HashMap 으로 딕셔너리를 만든 뒤 각 이름별 인덱스를 담아두고, 호명한 이름의 인덱스는 하나 줄이고 호명한 이름의 바로 이전 인덱스에 있는 친구의 이름은 하나 늘리는 방식으로 인덱스를 계속 바꿔주면, 인덱스를 한번에 접근할 수 있습니다.
Map 자료구조는 put으로 key value값을 넣어주고, get(Key)로 value를 가져올 수 있습니다.
그리고, Map의 키들을 가져오는 keySet() 메서드에서 반환되는 Set은 iterable하지 않으므로 Iterator를 사용하여 순회를 해주어야 합니다.

'자바 알고리즘 기초' 카테고리의 다른 글
JAVA 기초 알고리즘 - [프로그래머스] 과제 진행하기 (여러 값을 가진 리스트? 객체 만들기! + stack) (1) | 2023.05.09 |
---|---|
JAVA 기초 알고리즘 - [프로그래머스] 요격 시스템 (정렬은 Arrays.sort()이고, overriding이 가능하다) (0) | 2023.05.01 |
JAVA 기초 알고리즘 - 공원 산책 (String 값을 비교할 땐 equals) (0) | 2023.05.01 |
JAVA 기초 알고리즘 - 개인정보 수집 유효기간 (문자열 split 사용으로 배열로 바꾸기) (0) | 2023.04.30 |
JAVA 기초 알고리즘 - 추억 점수 (Arrays.asList.indexOf()) (0) | 2023.04.29 |