Open robert-min opened 1 year ago
import java.util.ArrayList;
import java.util.ListIterator;
public class Main
{
public static void main(String[] args)
{
// 컬렉션 생성
ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("F");
System.out.println("while문 지나기 전 리스트에 들어있던 값 : " + list);
// 리스트에 들어있는 값에 각각 '+' 붙이기
ListIterator<String> listIterator = list.listIterator();
while(listIterator.hasNext())
{
Object element = listIterator.next();
listIterator.set(element + "+");
}
System.out.println("while문 지난 후 수정된 결과 : " + list);
// 리스트에 들어있는 값을 역순으로 표시
System.out.print("역순 출력 결과 : ");
while(listIterator.hasPrevious())
{
Object element = listIterator.previous();
System.out.print(element + " ");
}
System.out.println();
}
}
// >> while문 지나기 전 리스트에 들어있던 값 : [A, B, C, D, E, F]
// >> while문 지난 후 수정된 결과 : [A+, B+, C+, D+, E+, F+]
// >> 역순 출력 결과 : F+ E+ D+ C+ B+ A+
import java.util.*;
class Solution {
public int solution(int[] nums) {
HashMap<Integer, Integer> map = new HashMap<>();
for (int num : nums) {
map.put(num, map.getOrDefault(num, 0) + 1);
}
int size = map.size();
if (size >= (nums.length / 2)) {
return nums.length / 2;
} else {
return size;
}
}
}
// 문자 길이로 정렬
Arrays.sort(phone_book, (String s1, String s2) -> s1.length() - s2.length());
import java.util.*;
class Solution {
/*
Return : 어떤 번호가 다른 번호의 접두어가 있으면 false, 없으면 true
*/
public boolean solution(String[] phone_book) {
Map<String, Integer> map = new HashMap<>();
// 모든 전화번호를 HashMap
for (int i = 0; i < phone_book.length; i++) {
map.put(phone_book[i], i);
}
for (int i = 0; i < phone_book.length; i++) {
for (int j = 0; j < phone_book[i].length(); j++) {
// key의 substring을 출력하여 HashMap에 존재하는지 확인
if (map.containsKey(phone_book[i].substring(0, j))) return false;
}
}
return true;
}
}
import java.util.*;
class Solution {
/*
Return : 어떤 번호가 다른 번호의 접두어가 있으면 false, 없으면 true
*/
public boolean solution(String[] phone_book) {
Arrays.sort(phone_book);
for (int i = 0; i < phone_book.length - 1; i++) {
// str1.startsWith(str2) : str1이 str2로 시작되면 True
if (phone_book[i+1].startsWith(phone_book[i])) return false;
}
return true;
}
}
iter.next() + 1
import java.util.*;
class Solution { / Return : 어떤 번호가 다른 번호의 접두어가 있으면 false, 없으면 true / public int solution(String[][] clothes) { int answer = 1; Map<String, Integer> map = new HashMap<>();
for (String[] cloth : clothes) {
map.put(cloth[1], map.getOrDefault(cloth[1], 0) + 1);
}
Iterator<Integer> iter = map.values().iterator();
while (iter.hasNext()) {
answer *= iter.next() + 1;
}
// 아무것도 입지 않는 경우 제외
return answer - 1;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/42579?language=java
mapToGenres.sort(((o1, o2) -> map.get(o2) - map.get(o1)));
import java.util.*;
class Music {
int idx;
int count;
public Music(int idx, int count) {
this.idx = idx;
this.count = count;
}
}
class Solution {
/*
Return : 노래의 고유 번호 순서대로
- 장르 별 가장 많이 재생된 노래 2개, 1개만 있을 경우 1개만
- 장르 별 전체 재생 수가 많은 -> 장르 안에 재생 수가 많은 -> 장르의 고유 번호가 높은
*/
public int[] solution(String[] genres, int[] plays) {
ArrayList<Integer> answer = new ArrayList<>();
HashMap<String, Integer> map = new HashMap<>();
for (int i = 0; i < genres.length; i++) {
map.put(genres[i], map.getOrDefault(genres[i], 0) + plays[i]);
}
// 가장 많이 플레이된 장르
ArrayList<String> mapToGenres = new ArrayList<>();
// key 값을 추출 한 후 value 기준으로 내림차순 정렬
for (String item : map.keySet()) {
mapToGenres.add(item);
}
mapToGenres.sort(((o1, o2) -> map.get(o2) - map.get(o1)));
// 장르 내에서 가장 많이 들은 노래
for (String item : mapToGenres) {
// 장르별 재생 횟수를 저장할 ArrayList 생성
ArrayList<Music> music = new ArrayList<>();
for (int i = 0; i < genres.length; i++) {
if (item.equals(genres[i])) {
music.add(new Music(i, plays[i]));
}
}
music.sort(new Comparator<Music>() {
@Override
public int compare(Music o1, Music o2) {
// count가 같을 경우 idx 오름 차순
if (o1.count == o2.count) {
return o1.idx - o2.idx;
}
// count 내림 차순
return o2.count - o1.count;
}
});
// 장르별로 저장(최대 2개)
answer.add(music.get(0).idx);
if (music.size() != 1) {
answer.add(music.get(1).idx);
}
}
// int[] 배열로 변환
return answer.stream().mapToInt(i -> i).toArray();
}
}
HashMap을 활용한 풀이
두 배열 정렬 후 값 비교
최악의 경우 아래와 동일한 시간 복잡도가 소요되지만, 일반적인 경우 정렬 된 값으로 그전에 찾기 때문에 시간 초과 문제 해결
}