๋ฌธ์ ์ ๋ชฉ | ์ ๋ต๋ฅ | ๋์ด๋ |
๋ฉ๋ด๋ฆฌ๋ด์ผ | 48% | Lv.2 |
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๋ฌธ์ ์์ฝ
์๋๋ฒํธ์ ์๋์ด ์ฃผ๋ฌธํ ๋จํ๋ฉ๋ด ์กฐํฉ์ด ์ฃผ์ด์ง ๋, ์๋ก์ด ์ฝ์ค ์๋ฆฌ๋ฅผ ๊ตฌํ์ฌ๋ผ.
์กฐ๊ฑด 1) ์๋ก์ด ์ฝ์ค์๋ฆฌ๋ ๋จํ๋ฉ๋ด 2๊ฐ ์ด์์ผ๋ก ๊ตฌ์ฑ๋์ด์ผ ํ๋ค
์กฐ๊ฑด 2) ์๋ก์ด ์ฝ์ค์๋ฆฌ๋ ์๋์ด ์ฃผ๋ฌธํ ๋จํ๋ฉ๋ด ์กฐํฉ์ ์ ์ด๋ 2๋ฒ ์ด์ ํฌํจ๋์ด์ผ ํ๋ค(์๋์ด 2๋ฒ ์ด์ ์ฃผ๋ฌธ)
์กฐ๊ฑด 3) ์ ๋ต ๋ฐฐ์ด์ ๋ฌธ์์ด ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ๋ฐํ๋์ด์ผ ํ๋ค.
์กฐ๊ฑด 4) ์ฝ์ค ์๋ฆฌ์ ๋จํ๋ฉ๋ด ๊ฐ์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ, ๋ ๋ง์ด ์ฃผ๋ฌธ๋ ๊ฒ์ ๋ฉ๋ด์ ์ถ๊ฐํ๋ค(๊ฐ๋ค๋ฉด ๋ ๋ค ์ถ๊ฐ)
์กฐ๊ฑด 4์ ๊ฒฝ์ฐ ๋ฌธ์ ์ ๊ธฐ์ ๋์ด ์์ง๋ ์์ง๋ง, ์ง๋ฌธํ๊ธฐ ๊ฒ์ํ์ ํตํด ์ ์ ์์๋ค.
์๊ฐํ ๊ฒ
์ฐ์ , ๋ฐฐ์ด์ ํฌ๊ธฐ์ ๋ฌธ์์ด์ ํฌ๊ธฐ๋ฅผ ๋ณด๊ณ ์์ ํ์์ด ๊ฐ๋ฅํ ๋ฌธ์ ์ธ์ง ํ์ธํ์ฌ์ผ ํ๋ค.
๋ฐฐ์ด ๊ธธ์ด 20, ๋ฌธ์์ด ๊ธธ์ด 10์ดํ๋ก, ์์ ํ์์ด ๊ฐ๋ฅํ๋ค.
ํ์ด
Step1. course ๊ฐ์ ๋ํด์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ์ฐพ๊ธฐ String[] dfs(String str, int len){return String[]} ํจ์
- stack ๊ธธ์ด==ํ์ฌ course ⇒ ๊ฒฝ์ฐ์ ์ ์ถ๊ฐ + pop()
- stack ๊ธธ์ด==0 ⇒ push
- ๋๋จธ์ง[1~course-1] ⇒ ๊ธฐ๋ณธ์ ์ผ๋ก pushํ๋, ๋จ์ ์์๊ฐ ์์ผ๋ฉด pop()
Step2. ํด๋น ๊ฒฝ์ฐ๋ฅผ hashmap ์ด์ฉํ์ฌ dictionary ํํ๋ก ์ ์ฅ("์๋ฆฌ๋ชฉ๋ก":์ฃผ๋ฌธ๊ฐ์)
Step3. dictionary๋ก ์ ์ฅํ ๋ ๊ฐ course ๊ฐ์ ๋ํด maxValue๋ฅผ ์ ๋ฐ์ดํธํ์ฌ, maxValue์ ํด๋นํ๋ dictionary๋ง ์ ๋ต์ ์ถ๊ฐ
Step4. ์ ๋ต ํํ๋ฅผ ์ ๋ ฌํ ๋ค, array๋ก ๋ณํ
์ฝ๋
import java.util.*;
class Solution {
String[] dfs(String str, int len){
List<String> vector=new ArrayList<String>();
int[] idx_stack=new int[len];
int top=-1;
int start_idx=-1;
int last_idx=0;
while(start_idx<=str.length()-len){
if(top==-1){//push
idx_stack[++top]=++start_idx;
last_idx=start_idx;
}else if(top==(len-1)){//์ต๋ ์์ ์ฑ์
String nowstr="";
for(int idx:idx_stack){
nowstr+=str.substring(idx, idx+1);
}
vector.add(nowstr);
last_idx=idx_stack[top--];
while(top>-1){
if(last_idx+1<=(str.length()-1)){//ํ์ฌ ์์ len-1๊ฐ
break;
}else{//ํ์ฌ ์์ len-2๊ฐ->pop
last_idx=idx_stack[top--];
}
}
}else{//1๊ฐ ์ด์ ์ต๋-1 ์ดํ
while(top>-1){
if(last_idx+1<=(str.length()-1)){//push
idx_stack[++top]=++last_idx;
break;
}else{//pop
last_idx=idx_stack[top--];
}
}
}
}
return vector.toArray(new String[vector.size()]);
}
public String[] solution(String[] orders, int[] course) {
List<String> answer = new ArrayList<String>();
for(int c_num:course){
int maxCount=0;
Map<String, Integer> ht = new HashMap<String, Integer>();
for(int i=0; i<orders.length;i++){
char[] str_char=orders[i].toCharArray();
Arrays.sort(str_char);
String now_order=new String(str_char);
if(now_order.length()>=c_num){
String[] s_list=dfs(now_order, c_num);
for(String substr:s_list){
if(ht.containsKey(substr)==true){
ht.put(substr, ht.get(substr)+1);
if(maxCount==1){
maxCount=2;
}else{
if(maxCount<ht.get(substr)){
maxCount+=1;
}
}
}else{
ht.put(substr, 1);
if(maxCount==0){
maxCount=1;
}
}
}
}
}
for(String idx:ht.keySet()){
if(maxCount<2){
break;
}
else if(ht.get(idx)==maxCount){
answer.add(idx);
}else{
continue;
}
}
}
answer.sort(null);
return answer.toArray(new String[answer.size()]);
}
}
์ฌ์ฉํ ๊ธฐ๋ฅ ์ ๋ฆฌ
- ๋ฌธ์์ด substring
๋ฌธ์์ด๋ณ์.substring(์์ ์ธ๋ฑ์ค, ๋ ์ธ๋ฑ์ค+1)
- List ์ ๋ ฌ
List๋ณ์.sort(null)
- List -> Array ๋ณํ
List๋ณ์.toArray(new ์๋ฃํ(List๋ณ์.size())
- ํด์ ํจ์ ์ฌ์ฉ
Map<key์๋ฃํ, value์๋ฃํ> ๋ณ์๋ช = new HashMap<key์๋ฃํ, value์๋ฃํ>();
- ๊ฐ ์ถ๊ฐ ๋ณ์๋ช .put(key, value)
- ๊ฐ์ผ๋ก ์ญ์ ๋ณ์๋ช .values().remove(์ญ์ ํ ๊ฐ)
- ์กฐ๊ฑด์ผ๋ก ์ญ์ ๋ณ์๋ช .values().removeIf(์กฐ๊ฑด)
- ๋ชจ๋ ํค ๊ฐ์ ธ์ค๊ธฐ ๋ณ์๋ช .keySet()
- ๋ชจ๋ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ ๋ณ์๋ช .values()
- ํค๊ฐ์ด ์กด์ฌํ๋์ง ํ์ธ ๋ณ์๋ช .containsKey(ํค๊ฐ)
ํ ์ค ์ ๋ฆฌ
ํด๋น ๋ด์ฉ์ python์ dictionary ์๋ฃํ์ ์ฌ์ฉํ๋ฉด ์๋นํ ๋น ๋ฅธ ์๊ฐ ๋ด์ ํ ์ ์์๋ค.
Java ์๋ฃํ ๋ณํ์ด ์์ง ์ต์ํ์ง ์์์ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฐ ๋ฌธ์ !
'์๊ณ ๋ฆฌ์ฆ๐ฅ > ๋ฌธ์ ํ์ด (Java)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] ์ฐ์๋ ๋ถ๋ถ ์์ด์ ํฉ (Lv.2) 2023/7/9 (0) | 2023.07.09 |
---|---|
[Programmers] ๋ ์ ์ฌ์ด์ ์ ์ ์ (Lv.2) 2023/6/11 (0) | 2023.06.11 |
[Programmers] ์๊ฒฉ์์คํ (Lv.2) 2023/6/3 (0) | 2023.06.03 |