티스토리 뷰
💻JAVA 코드 바로보기
□문제 설명
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
□제한사항
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
□입출력 예
participant | completion | return |
["leo", "kiki", "eden"] | ["eden", "kiki"] | "leo" |
["marina", "josipa", "nikola", "vinko", "filipa"] | ["josipa", "filipa", "marina", "nikola"] | "vinko" |
["mislav", "stanko", "mislav", "ana"] | ["stanko", "ana", "mislav"] | "mislav" |
□입출력 예 설명
예제 #1
"leo"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
예제 #2
"vinko"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
예제 #3
"mislav"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.
🌼JAVA 알고리즘
□초기화면
□풀이 과정
participant의 모든 값을 조사해서, participant와 completion 사이에 같은 값이 없을 때에만 answer에 추가하면 된다! 라고 생각하여 풀었으나, 중복되는 이름에서 정상적으로 작동하지 않았다 |
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
boolean t = false;
int cnt = 0;
for(int i=0;i<participant.length;i++){
for(int j=0;j<completion.length;j++){
if(participant[i].equals(completion[j])) t = true;
}
if(t==false) answer=participant[i];
}
System.out.println(participant.length); //확인용
return answer;
}
}
이를 해결하기 위해 위의 풀이방식에서, 한번 판별에 사용한 completion의 값을 null로 변경하여 중복이름을 다시 처리하지 않도록 수정했다 |
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
boolean t = false;
int cnt = 0;
for(int i=0;i<participant.length;i++){
t = false;
for(int j=0;j<completion.length;j++){
if(participant[i].equals(completion[j])){
completion[j]=null;
t = true;
}
}
if(t==false) answer=participant[i];
}
return answer;
}
}
그런데 위 방법으로 풀었을 때 테스트결과가 잘 나왔지만, 채점 결과는 case1을 제외하고 모두 실패했다. |
break문을 추가하여 실패경우를 수정했다. |
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
boolean t = false;
for(int i=0;i<participant.length;i++){
t = false;
for(int j=0;j<completion.length;j++){
if(participant[i].equals(completion[j])){
completion[j]=null;
t = true;
break;
}
}
if(t==false) answer+=participant[i];
}
return answer;
}
}
이렇게 해도 효율성검사에서는 모두 시간초과로 총점 50점이 최대였다.. 해시를 사용하는 문제이지만, 아직 해시개념을 배우지 않았기에 이정도로 만족하겠다! |
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
boolean t = false;
for(int i=0;i<participant.length;i++){
t = false;
for(int j=0;j<completion.length;j++){
if(participant[i].equals(completion[j])){
completion[j]=null;
t = true;
break;
}
}
if(t==false) answer+=participant[i];
}
return answer;
}
}
□코드 결과
□정답 코드 (다른사람 풀이 참고)
import java.util.HashMap;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer ="";
HashMap<String, Integer> hm = new HashMap<>();
for(String player : participant) hm.put(player, hm.getOrDefault(player, 0) + 1);
for(String player : completion) hm.put(player, hm.get(player) -1);
for(String key : hm.keySet()) {
if(hm.get(key) != 0) {
answer = key;
System.out.println(answer);
break;
}
}
return answer;
}
}
□링크
코딩테스트 연습 - 완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수
programmers.co.kr
About Me
💻GitHub/KimSky904 KimSky904 - Overview Department of New Media Software. KimSky904 has 8 repositories available. Follow their code on GitHub. github.com
code-review.tistory.com
'[코테] > [Programmers Lv1]' 카테고리의 다른 글
[Programmers] Lv1_정수 내림차순으로 배치하기 (JAVA) (0) | 2021.07.13 |
---|---|
[Programmers] Lv1_모의고사 (JAVA) (0) | 2021.06.27 |
[Programmers] Lv1_나누어 떨어지는 숫자 배열 (JAVA) (0) | 2021.06.17 |
[Programmers] Lv1_문자열 내 p와 y의 개수 (0) | 2021.06.17 |
[Programmers] Lv1_K번째수 (JAVA) (0) | 2021.06.16 |
- c언어
- C++
- Java
- lv1
- 배열
- 자바
- 구름에듀 기출문제
- 연습문제
- 구름에듀
- cospro기출
- 배열활용문제
- YBM
- 구름 기출문제
- 알고리즘
- groom
- groomedu
- programmers
- 프로그래머스
- COSPRO 2급
- c언어 기출문제
- 코딩테스트
- C
- Cos Pro
- lv2
- 1급
- YBM기출
- 기출문제
- CosPro
- 코스프로
- cospro기출문제
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |