일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- pandas
- 개발자
- 머신러닝
- 데이터베이스 개론
- 데이터베이서
- 판다스
- 야학
- 생활코딩
- 데이터베이스
- Java
- 파이썬
- 머신러닝야학
- 연산자
- 카카오클라우드스쿨2기
- CNN
- 딥러닝
- Python
- LeNet
- tensorflow
- reshape
- JavaScript
- 생활코딩 데이터베이스
- 이것이 자바다
- 생활코딩 머신러닝야학
- 머신러닝(딥러닝)
- MySQL
- flatten
- Database
- Today
- Total
IT's 우
[Java] 프로그래머스 - 달리기 경주, HashMap 본문
📖 풀이한 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💡 문제에서 사용된 알고리즘
- HashMap
HashMap
HashMap의 선언
기본적으로 Map은 key:value 형태로 구성되어 있습니다.
예를 들면, {국어=90점, 수학=80점} 각각의 과목이 key, 점수를 value라고 생각하면 됩니다.
그리고 key는 Set와 마찬가지로 중복이 불가능합니다.
먼저 선언하는 방법을 코드를 통해 설명하겠습니다.
HashMap<String,Integer> myMap=new HashMap<String, Integer>();
System.out.println(myMap.toString()); //{}
HashMap의 주요 메서드
//1. put
myMap.put("Korean", 90);
myMap.put("Math", 80);
myMap.put("English", 87);
myMap.put("Science", 90);
System.out.println(myMap.toString()); //{English=87, Science=90, Korean=90, Math=80}
myMap.put("English", 95);
System.out.println(myMap.toString()); //{English=95, Science=90, Korean=90, Math=80}
//2. remove
myMap.remove("English");
System.out.println(myMap.toString()); //{Science=90, Korean=90, Math=80}
//3. get
System.out.println(myMap.get("Korean")); //90
//4. size
System.out.println(myMap.size()); //3
//5. contains
System.out.println(myMap.containsKey("Math")); //true
System.out.println(myMap.containsKey("English")); //false
System.out.println(myMap.containsValue(90)); //true
//6. keySet, Values
System.out.println(myMap.keySet()); //[Science, Korean, Math]
System.out.println(myMap.values()); //[90, 90, 80]
//7. forEach
for(String subject: myMap.keySet()) {
System.out.println(subject); //Science, ...
}
put
Map 안에 값을 넣기 위해서는 put을 사용합니다. 선언부에서 정의했던 자료형의 쌍을 집어넣게 되는데, HashSet에서처럼 작성한 코드의 순서와는 상관없이 값이 저장됩니다.
또한, 앞서 설명한듯이 key값은 중복이 불가능합니다.
remove
remove(key)
remove의 결과로 해당 key와 value가 모두 지워지게 됩니다.
get
get메서드 key를 사용하여 value를 호출하게 됩니다.
어차피 하나의 Map에는 중복되는 key가 존재하지 않으므로, 고유한 key는 하나의 value만을 가지게 됩니다.
size
size메서드는 Map의 크기를 int Type으로 반환하는 메서드입니다.
contains
이전의 다른 자료구조의 설명에서도 contains는 다룬 적이 많이 있습니다. 차이점이 있다면, Map의 key와 value에 각각 따로 containsKey와 containsValue라는 메서드가 구현되어 있다는 점입니다.
keySet, Values
keySet은 Map이 가지고 있는 key를, Values는 Map이 가지고 있는value를 각각 반환합니다. 특히 keySet은 다음에 설명할 forEach 문과 함께 자주 사용하는 메서드이므로 익숙해지는 것이 좋습니다.
forEach
keySet()의 결과인 key의 집합을 돌면서 수행하게 됩니다.
for(String subject: myMap.keySet()) {
System.out.println(subject+" : "+myMap.get(subject)); //Science : 90, ...
}
📜 코드 설명
- HashMap에 key : 선수이름, value: 선수 등수 인덱스를 넣어놓았다.
- callings를 보면서 선수의 등수를 바꿔주었다.(map에 인덱스로 바꿔주고, players의 순서도 바꿔준다.)
📜 코드
import java.util.*;
public class 달리기경주 {
public String[] solution(String[] players, String[] callings) {
// HashMap에 선수들의 등수 넣기
int len = players.length;
HashMap<String, Integer> idx = new HashMap<>();
for (int i = 0; i < len; i++) {
idx.put(players[i], i);
}
// calling에서 불리면 현재 등수와 앞 등수의 인덱스 바꿔주기
for (String call : callings) {
// 불린 선수의 인덱스 map에서 찾기
int index = idx.get(call);
// players의 인덱스에 따라 순서 바꿔주고, map에서 인덱스 값도 바꿔준다.
// 앞선수 인덱스 바꾸기
String another = players[index - 1];
idx.put(another, index);
// 불린 선수 인덱스 -1로 바꾸기
idx.put(call, index - 1);
// players의 순서도 바꾸기
players[index] = another;
players[index - 1] = call;
}
return players;
}
}
참고
1.4.7 맵(Map) - HashMap
[TOC] ## 맵(Map) - HashMap 자료구조 단원의 마지막은 맵(Map)입니다. Map형태의 자료구조는 최근 가장 핫한 자료구조 중 하나입니다. 맵 리듀스(Map Re…
wikidocs.net
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[java] 프로그래머스 - 짝지어 해결하기 (0) | 2023.08.01 |
---|---|
[Java] 프로그래머스 - 기지국 설치 (0) | 2023.07.19 |
[java, BFS(깊이우선탐색)]프로그래머스 - 리코쳇 로봇 (1) | 2023.06.01 |
[java, DFS] 프로그래머스 - 광물 캐기 (0) | 2023.05.24 |
[java, BFS] 프로그래머스 - 무인도 여행 (0) | 2023.05.18 |