프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr


의식의 흐름
문제 대충 읽은 후 "{", "}" 지우고 HashSet 이용해서 중복되지 않게 숫자 걸러서 다시 int[]에 담으면 되는거 아닌가?라고 생각하고 풀었다가 바로 테스트케이스들 대부분 실패
정신 차리고 문제 다시 제대로 읽었더니 "원소의 순서가 다르면 서로 다른 튜플입니다."가 있었네,,
어떻게 풀까 고민하다가 String s에 많이 포함된 순서대로 a1, a2, ...인 것을 깨닫고 숫자 별로 작성된 개수에 따라 내림차순 정렬하면 되겠다고 생각했다.
풀이
1. "{", "}" 제거 후 "," 기준으로 String 나누어 배열 생성
2. HashMap을 이용해 key로는 주어진 요소(숫자), value로는 String s에 몇 번 포함되어 있는지 담는다.
3. HashMap에 담긴 값들을 num(요소), cnt(String s에 몇 번 포함되어 있는지)를 갖는 Num 클래스로 바꾸어 ArrayList에 담는다.
4. 해당 ArrayList를 cnt 기준으로 내림차순 정렬한 후, 차례대로 answer에 담는다.
코드
import java.util.*;
class Num implements Comparable<Num>{
int num;
int cnt;
public Num(int num, int cnt){
this.num = num;
this.cnt = cnt;
}
@Override
public int compareTo(Num o){ // cnt 기준 내림차순 정렬
return o.cnt - this.cnt;
}
}
class Solution {
public int[] solution(String s) {
int[] answer = {};
s = s.replace("{","").replace("}","");
String[] strNums = s.split(",");
Map<Integer,Integer> map = new HashMap<>();
for(int i=0;i<strNums.length;i++){
int num = Integer.parseInt(strNums[i]);
if(map.containsKey(num))
map.put(num,map.get(num)+1);
else
map.put(num,1);
}
ArrayList<Num> nums = new ArrayList();
for(int key:map.keySet()){
nums.add(new Num(key, map.get(key)));
}
Collections.sort(nums);
answer = new int[nums.size()];
for(int i=0;i<nums.size();i++)
answer[i] = nums.get(i).num;
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[JAVA] 프로그래머스 - 거스름돈 (0) | 2023.11.23 |
---|---|
[JAVA] 프로그래머스 - [3차]압축 (0) | 2023.05.03 |
[JAVA] 프로그래머스 - [1차] 캐시 (0) | 2023.05.01 |
[JAVA] 프로그래머스 - 귤 고르기 (0) | 2023.05.01 |
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr


의식의 흐름
문제 대충 읽은 후 "{", "}" 지우고 HashSet 이용해서 중복되지 않게 숫자 걸러서 다시 int[]에 담으면 되는거 아닌가?라고 생각하고 풀었다가 바로 테스트케이스들 대부분 실패
정신 차리고 문제 다시 제대로 읽었더니 "원소의 순서가 다르면 서로 다른 튜플입니다."가 있었네,,
어떻게 풀까 고민하다가 String s에 많이 포함된 순서대로 a1, a2, ...인 것을 깨닫고 숫자 별로 작성된 개수에 따라 내림차순 정렬하면 되겠다고 생각했다.
풀이
1. "{", "}" 제거 후 "," 기준으로 String 나누어 배열 생성
2. HashMap을 이용해 key로는 주어진 요소(숫자), value로는 String s에 몇 번 포함되어 있는지 담는다.
3. HashMap에 담긴 값들을 num(요소), cnt(String s에 몇 번 포함되어 있는지)를 갖는 Num 클래스로 바꾸어 ArrayList에 담는다.
4. 해당 ArrayList를 cnt 기준으로 내림차순 정렬한 후, 차례대로 answer에 담는다.
코드
import java.util.*;
class Num implements Comparable<Num>{
int num;
int cnt;
public Num(int num, int cnt){
this.num = num;
this.cnt = cnt;
}
@Override
public int compareTo(Num o){ // cnt 기준 내림차순 정렬
return o.cnt - this.cnt;
}
}
class Solution {
public int[] solution(String s) {
int[] answer = {};
s = s.replace("{","").replace("}","");
String[] strNums = s.split(",");
Map<Integer,Integer> map = new HashMap<>();
for(int i=0;i<strNums.length;i++){
int num = Integer.parseInt(strNums[i]);
if(map.containsKey(num))
map.put(num,map.get(num)+1);
else
map.put(num,1);
}
ArrayList<Num> nums = new ArrayList();
for(int key:map.keySet()){
nums.add(new Num(key, map.get(key)));
}
Collections.sort(nums);
answer = new int[nums.size()];
for(int i=0;i<nums.size();i++)
answer[i] = nums.get(i).num;
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[JAVA] 프로그래머스 - 거스름돈 (0) | 2023.11.23 |
---|---|
[JAVA] 프로그래머스 - [3차]압축 (0) | 2023.05.03 |
[JAVA] 프로그래머스 - [1차] 캐시 (0) | 2023.05.01 |
[JAVA] 프로그래머스 - 귤 고르기 (0) | 2023.05.01 |