[プログラマー]完走しなかった選手java
2887 ワード
問題の説明
多くのマラソン選手がマラソンに参加した.1人の選手を除いて、すべての選手がマラソンを完走した.
マラソンに出場する選手の名前と完走した選手の名前の並びが完成したら、完走していない選手の名前を返す解決関数を書いてください.
せいげんじょうけん
I/O例
I/O例説明
例1
例2
例#3
私の答え
ハッシュ問題であることに初めて気づいたが,ハッシュではなく繰り返し文をまず思いついた.
いつこのようなアルゴリズム的な思考ができるのか...ほほほ
まず,2つのアレイを第1の方法で配列した.sort()ソートを使用すると、0番目のインデックスから比較し、他のインデックスがある場合はインデックスを返し、インデックスに対応する参加者の配列値を返します.
最初の解
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
//배열 정렬
Arrays.sort(participant);
Arrays.sort(completion);
//int i 선언 -> return 값에도 사용하기 때문에
int i;
for(i = 0;i<completion.length;i++){
//문자열 비교를 위해 .equals
if(!completion[i].equals(participant[i])){
break;
}
}
return participant[i];
}
}
このように解くのは簡単ですが、ハッシュアルゴリズムでこの問題を解決したいと思います.だから考えているうちに、関数getOrDefault()を知った.
mapにキー値がある場合、この関数は私が設定した値をvalueに返します.
マッピングにkeyに対応する値がない場合はdefaultに設定された値を返します.
だから地図は繰り返してはいけない性質を持っている.
名前をキーとして、名前に対応する選手が何人いるかの数字にvalueを加えればいい.
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
// key = String , value는 Integer 형의 map 선언
Map<String,Integer> map = new HashMap<>();
//향상된 for문을 사용해 map에 정보를 넣는데,
//이때 value값에 map.getOrDefault()를 사용해
//해당 이름의 key값이 이미 map에 있다면 +1을해서 넣어주고
//아니라면 1로 입력되게 한다(0이 default인데 +1을 해주므로써 1명이 있게 되는거 //다)
for(String player : participant){
map.put(player,map.getOrDefault(player,0) + 1);
}
//map에서 완주된 선수들의 명단을 -1해서 다시 설정해준다.
for(String player : completion){
map.put(player,map.get(player)-1);
}
//map에서 value의 값이 0이 아니라면 -> 완주를 했다면 위의 for문에서 -1을 했기 //때문에 0 일 수 밖에 없다.
for(String player : participant){
if(map.get(player) != 0){
answer = player;
break;
}
}
return answer;
}
}
Reference
この問題について([プログラマー]完走しなかった選手java), 我々は、より多くの情報をここで見つけました https://velog.io/@moon960427/프로그래머스-완주하지-못한-선수.javaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol