์ค๋๋ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ๋ณต๋ฌธ์ ํ์ฉํ ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ค.
์ด์ ๋ ๋จ์ํ ์กฐ๊ฑด๋ฌธ, ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉ๋ฒ๋ฟ๋ง ์๋๋ผ ๋ ์ฌ์ฉํ๋ ํํ๋ค( int [], String [], ArrayList <> )์ด ์๋ ๋ค์ํ ๋ณ์๋ค์ ํํ์ ํน์ง์ ์์๋ณด๊ณ ์ ์ฌ์ ์์ ํ์ฉํ๋ ๋ฌธ์ ํ์ด๊ฐ ํ์ํ๋ค.
๋ฌธ์ ๋งํฌ: https://school.programmers.co.kr/learn/courses/30/lessons/42576
- ์กฐ๊ฑด
String[] participant: ๋ง๋ผํค ๊ฒฝ๊ธฐ์ ์ฐธ์ฌํ ๋ชจ๋ ์ ์๋ค์ ์ด๋ฆ์ด ๋ด๊ธด ๋ฐฐ์ด
String [] completion: ์์ฃผํ ๋ชจ๋ ์ ์๋ค์ ์ด๋ฆ์ด ๋ด๊ธด ๋ฐฐ์ด
์์ฃผํ์ง ๋ชปํ ์ ์์ ์ด๋ฆ์ return ํ๋ ํจ์๋ฅผ ์์ฑํด๋ผ
* 1โค ์ฐธ์ฌํ ์ ์์ ์ โค 100,000๋ช
* completion์ ๊ธธ์ด๋ participant์ ๊ธธ์ด๋ณด๋ค 1 ์๋ค.
* ์ฐธ๊ฐ์์ ์ด๋ฆ์ 1๊ฐ ์ด์ 20๊ฐ ์ดํ์ ์ํ๋ฒณ ์๋ฌธ์์ด๋ค.
* ์ฐธ๊ฐ์ ์ค์๋ ๋๋ช
์ด์ธ์ด ์์ ์ ์์ต๋๋ค.
import java.util.List;
import java.util.Arrays;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
List<String> doneList = Arrays.asList(completion);
for (String s: participant) {
if (!doneList.contains(s)) {
answer = s;
}
}
// ์ฌ๊ธฐ์ ์ค๋ณต๊ฐ์ ์ฒดํฌํ๋ ์ฝ๋๊ฐ ํ์ํจ
return answer;
}
}
for๋ฌธ์ ๋๋ฆฌ๋ฉด์ ํฌํจ๋์ง ์์๊ฐ์ ์ ์ฅํ๋ ์ฝ๋๋ฅผ ๋ง๋ค์๊ณ ์ค์ ๋ก ์ค๋ณต๊ฐ์ด ์๋ ๊ฒฝ์ฐ๋ ์ํ๋ ๊ฐ์ด ๋์๋ค.
๋ค๋ง ํ
์คํธ 3๋ฒ์ฒ๋ผ ์์ฃผํ์ง ๋ชปํ ์ฌ๋๊ณผ ์์ฃผํ ์ฌ๋์ด ๋๋ช
์ด์ธ์ผ ๋๋ ์ํ๋ ๋๋ก ์ฒดํฌ๋์ง ์์์ ๋ฐฉ๋ฒ์ ์ฐพ์๋ดค๋ค.
๐ ์ฝ๋ ๐
boolean key = false;
if(answer.length() == 0) {
for(String s: participant) {
if(doneList.contains(s)) {
key = !key;
}
}
}
์๋: key์ ๊ธฐ๋ณธ๊ฐ์ false๋ก ์ ์ธ ํ participant์ completion๊ฐ์ด ์ผ์นํ๋ ์ธ๋ฑ์ค๋ง true๋ก ๋ฐ๊พผ๋ค.
์ด๋ฏธ if๋ฌธ์ผ๋ก ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ 0์ธ ๊ฒฝ์ฐ๋ง ์งํํ๊ธฐ ๋๋ฌธ์ ๋ฌด์กฐ๊ฑด ์ค๋ณต์ด ์๋ค๊ณ ๋ณด๋ฉฐ, ์ด ์ค ์ค๋ณต๊ฐ์ด ์์ ๊ฒฝ์ฐ ๋ค์ false๋ก ๋ฐ๊พผ ํ ๊ทธ ๊ฐ๋ง ์ถ์ถํ๊ณ ์ถ์๋ค.
์ฝ๋๋ฅผ ์ง๋ฉด์๋ ๋๋ ๋ฌธ์ ์
์ฌ์ค ์ด ๋ถ๋ถ์ ์งํํ๊ธฐ ์ ์๋ if-for-if๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ด๋ฏธ ์ฝ๋์ ๋นํจ์จ์ฑ์ด ๋ณด์ด๊ณ ๋ ์ง๊ธ ๋ด๊ฐ ์๋ํ๋ ค๋ ๋ฐฐ์ด์ ๋ณต์ฌ ์ญ์ ๋น์ฉ์ด ์ฆ๊ฐํ๋ค๋ ๊ฒ์ ์์ง๋ง ์ด ๋ฐฉ๋ฒ์ด ์ค์ ๋ก ๊ตฌํ๋๋ ๊ฑด ๋ง๋์ง ๊ถ๊ธํด์ ธ์ ๋ค๋ฅธ ๊ฑด ์ ๊ฒฝ ์ฐ์ง ์๊ณ ๊ตฌํ์ฌ๋ถ๋ง ํ์ธํด ๋ดค๋ค.
String[][] arr2 = new String[participant][2];
List<String> doneList = Arrays.asList(completion);
for(int i = 0; i < participant.length; i++) {
arr2[i][0] = participant[i];
arr2[i][1] = "0";
}
System.out.println(Arrays.deepToString(arr2));
// ์ถ๋ ฅ๊ฐ [[leo, 0], [kiki, 0], [eden, 0]]
์๊ฐํ ๋๋ก ์ด์ฐจ์ ๋ฐฐ์ด ์ค์ ์ ํ์ผ๋ ๋ฌธ์ ๊ฐ ์๋ค.
participant []๊ฐ String ๋ฐฐ์ด์ด๋ผ ์ด์ฐจ์ ๋ฐฐ์ด๋ String์ผ๋ก ์ค์ ํ๋๋ฐ ๊ทธ๋ผ ๋ ผ๋ฆฌ๊ฐ์ ๋ฃ์ ์๊ฐ ์๋ค.
๋ด๊ฐ ์ํ ๊ฑด ๋ ผ๋ฆฌ์ ๋ฐ์ ์ธ! ์ฐ์ฐ์๋ฅผ ์ด์ฉํด์ ์ค๋ณต์ผ๋ก ์ฒดํฌ๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ์์๋ค๊ณผ ๊ฐ์ด ๋ค๋ฅด๊ฒ ๋์ค๋๋ก ํ๋ ๊ฑด๋ฐ ํ๋จ์ ์ฌ์ฉ๋๋ ๊ฐ์ด ๋ฌธ์์ด๋ก ๋ค์ด๊ฐ๋ค๋ฉด ์ด ๋ฐฉ์์ ์งํํ ์ ์๊ฒ ๋๋ค.
์ค๋ณต์ฒดํฌ์ ํด๋น๋๋ ๊ฐ์ด ๋์ค๋ฉด arr [i][1]์ true์ฒ๋ผ ๋ฌธ์์ด๋ก ๋ฐ๊พธ๊ณ ํด๋น๋๋ ๋ชจ๋ ๋ฌธ์๋ฅผ reverse()ํ ๊น?
๊ทผ๋ฐ ์ด๋ ๊ฒ ์งํํ๋ฉด ์ฝ๋๊ฐ ๋๋ฌด ๊ธธ์ด์ง๊ณ ๋ณต์ก๋๊ฐ ์๋นํด์ ๋ค๋ฅธ ๋ฐฉ์์ ์ ๊ทผ์ ์๊ฐํด ๋ดค๋ค.
๊ทธ๋ผ 1๋ฒ์ ์ํฉ๊ณผ ๋ค๋ฅผ ๊ฒ ์์ด์ ์ง์ ์์ผ๋ก ๊ทธ๋ฆผ์ ๊ทธ๋ ค๋ณด๋ค๊ฐ ์ผ์นํ๋ ๊ฐ์ ์์ ์ง์๋ฒ๋ฆฌ๋ ์๊ฑฐ๋ฒ์ด ์๊ฐ๋ฌ๋ค.
๊ตณ์ด ํค ๊ฐ์ ์ค์ ํ ๊ฒ ์๋๋ผ ์์ฃผ์ ๋ชฉ๋ก์์ ์ฐธ๊ฐ์๋ฅผ ์ด์ฉํ์ฌ ์ผ์นํ๋ ๊ฒฝ์ฐ ๋ชฉ๋ก์์ ์ง์๋ฒ๋ฆฌ๋ฉด ์ด๋จ๊น?? ๊ทธ๋ผ ๋๋ช ์ด์ธ์ด๋ผ๋ ๊ฐ์ด ๋จ๊ฒ ๋๋ค๋ ์๊ฐ์ ํ๋ค.
๋งค๊ฐ๋ณ์๋ก ๋ฐ์์ค๋ ๋ฐฐ์ด participant์ ๋ฐ์ดํฐ์ ๋ณด์กด์ด ํ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ก์ด ๋ฐฐ์ด participantCopy๋ฅผ ์์ฑํ์ฌ ์งํํด ๋ดค๋ค.
๊ฐ์ ์ ์, ๋ฐํ์์ ์ด๊ณผ
์ฃผ์ด์ง ๋ฌธ์์ด์ ๋จผ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ํ ๊ฐ์ ์์๋๋ก ๋น๊ตํ๋ฉด์ ์ผ์นํ์ง ์๋ ๊ฐ์ ์ฐพ๋๋ค.
์ฌ์ค ์ด ๋ฐฉ๋ฒ๋ ์๊ฐํ์์ผ๋ ์ผ์นํ์ง ์๋ ๊ฐ์ด ๋์ค๋ฉด ๋ท๋ถ๋ถ๋ถํฐ ์์๊ฐ ๋ค ๋ฐ๋ฆฌ์ง ์๋?๋ผ๋ ์๊ฐ์ผ๋ก ๋ฐฐ์ ์์ผฐ๋ ๋ฐฉ๋ฒ์ด์๋ค. ์ด ๋ฐฉ๋ฒ์ผ๋ก ์งํํ ์ ์๋ค๊ณ ๋์์ ์ง์ ๊ทธ๋ ค๋ดค๋ค.
import java.util.Arrays;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
Arrays.sort(participant);
Arrays.sort(completion);
for(int i=0;i<completion.length; i++) {
if(!completion[i].equals(participant[i])){
answer = participant[i];
break;
}
}
if("".equals(answer)) {
answer = participant[participant.length -1];
}
return answer;
}
}
์ญ์ ์ ๋งคํ ๋ ์ง์ ๊ทธ๋ ค๋ณด๋ ๊ฒ ํ์คํ๋ค.
์กฐ๊ฑด๋ฌธ์ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ ์์ ์ด ๋ฐ๋ก cpmpletion์ ์๋ ๊ฐ์ด ๋๊ณ , ์๋ณธ์ ํผ์๋ ์์๋ฟ๋๋ฌ ๋ฐํ์ ์๋ฌ๋ ๋ฐ์ํ์ง ์๋๋ค.
๋จ, ๋ถ์ผ์น ๊ฐ์ด ๊ฐ์ฅ ๋ง์ง๋ง ์ธ๋ฑ์ค๋ผ๋ฉด ์ฒ์ ์ค์ ํ ""์ผ๋ก ๋์ค๊ธฐ ๋๋ฌธ์ if์กฐ๊ฑด์ ์๋ ๋ฐฐ์ด์ธ participant []์ ๋ง์ง๋ง ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค.
์ด๋ ๊ฒ ์งํํ๋ฉด ๋ฐํ์๋ ํต๊ณผ๊ฐ ๋๋ค!
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;
}
}
return answer;
}
}
participant ๋ฐฐ์ด์ ์ํํ๋ฉด์ ์ด๋ฆ์ key๋ก ์ฌ์ฉํ๋๋ฐ value๋ํดํธ๋ฅผ 0์ผ๋ก ์ค์ ํ์ฌ ์ด๊ธฐ์ ๋์๋๋ key-value๋ฅผ (player, 1)๋ก ์ค์ ํ๊ณ ๋ค์ for๋ฌธ์์ key-value๋ฅผ -1์ฉ ์งํํ์ฌ ์๋์ ๊ฐ์ด ํ๋ณํ๊ฒ ๋๋ค.
1) ๋๋ช ์ด์ธ์ด ์์ ๋
value : 1 (๋ค์ for๋ฌธ์์ ๋งค์นญ๋๋ key๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ -1์ ๋ชปํ์)
2) ๋๋ช ์ด์ธ์ด ์์ ๋
value: 1(์ฒ์ for๋ฌธ์์ getOrDefault(player, 0) + 1๋ก ์ธํด ์ด 2๋ผ๋ ๊ฐ์ ๊ฐ์ง, ์ดํ -1์ด ์งํ๋จ)
์ด๋ ๊ฒ key-value๋ฅผ ํตํด ๊ฐ๋จํ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค
์ฒ์ ์ด์ฐจ์ ๋ฐฐ์ด์ ์ ์ธ ํ ์ํ๋ ๋๋ก ๊ฐ์ด ๋ค์ด๊ฐ๋์ง ํ์ธ์ฐจ toString()์ ํ๋๋ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์ผ์ฐจ์ ์ด์์ ๋ค์ฐจ์ ๋ฐฐ์ด์์๋ toString()์ด ์๋๋ผ deepToString()๋ฅผ ์งํํ๋ค๋ ๊ฒ์ ๋ฐฐ์ ๋ค.
๋ ๋ฐฐ์ด์ด ์๊ณ ๋ฑ ํ ๊ฐ์ง ๊ฐ๋ง ๋ค๋ฅด๊ณ ๋๋จธ์ง๋ ๋ชจ๋ ๋์ผํ๋ค๋ฉด ์ ๋ ฌ์ ํตํด ์๋ ๊ฐ์ ์ฐพ์ ์๋ ์๋ค.
ํฌํจ์ฌ๋ถ๋ฅผ ํ์ธํ๋ contains()๋ ์ค๋ณต์ฌ๋ถ๋ฅผ ์ฒดํฌํ์ง ์๊ณ ํ์ธํ ๊ฐ์ด ํ์ธํด์ผ ๋๋ ๋ฐ์ดํฐ์ ๋ชจ์์ ์กด์ฌํ๋์ง ์ฌ๋ถ๋ง ํ๋จํ๊ธฐ ๋๋ฌธ์ ์ง๊ธ ๋ฌธ์ ์์๋ ์ ํฉํ์ง ์์๋ค.
๋จ์ํ ๋ฐ๋ณต๋ฌธ์ด ์๋ ์ง๊ธ์ฒ๋ผ ์ฃผ์ด์ง ๊ฐ์ ์ฒดํฌ์ฌ๋ถ๊ฐ ํ์ํ ๊ฒฝ์ฐ key-value๋ฅผ ์ฌ์ฉํ๋ฉด ์กฐ๊ธ ๋ ํจ์จ์ ์ด๋ค.
๋๋ HashMap์ key๊ฐ์ด ์ค๋ณต๋์ง ์๊ณ ๊ฐ์ ๊ฐ์ผ ๊ฒฝ์ฐ ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋๋ค๋ ๊ฒ๋ง ์๊ณ ์์ด์ ์ค๋ณต๊ฐ์ ๊ฒฝ์ฐ ๋จ์ํ ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ์ค๋ณต๊ฐ ์ฒดํฌ๋ ๋ชปํ์ง ์์๊น ์ถ์๋๋ฐ
hm.put(player, hm.getOrDefault(player, 0) + 1);
hm.put(player, hm.get(player) - 1);
value๊ฐ์ get์ผ๋ก ์ค์ ๋์ด ์๋, ํน์ ๋ํดํธ๊ฐ์ ๊ฐ์ ธ์์ ์งํํ๋ฉด key๊ฐ์ ๊ทธ๋๋ก์ด๊ณ ๊ธฐ์กด๊ฐ์ ยฑ๊ฐ ๊ฐ๋ฅํ๊ฒ ๊ตฌํํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.