PROGRAMMERS_Lv1_์ฒด์ก๋ณต
๐ [Lv1_42862] ์ฒด์ก๋ณต
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = 0;
// ํ์ ์ฒด์ก๋ณต ๋ฐฐ์ด ( ์์, ๋ค์ ์ฌ์ ํ ๋ช
์ฉ, ์ด์ฐจํผ 0 ์ด๋ผ ์๊ด ์์)
int[] arr = new int[n+2];
// ํ์ ์ฒด์ก๋ณต ์
๋ ฅ ( ๋จผ์ ๋ค 1๊ฐ์ฉ ์ค๋ค )
for(int i=1; i<=n; i++){
arr[i]++;
}
// ์ฌ๋ฒ ์ฒด์ก๋ณต ์
๋ ฅ
for(int i=0; i<reserve.length; i++){
arr[reserve[i]]++;
}
// ์ฒด์ก๋ณต ๋๋
for(int i=0; i<lost.length; i++){
arr[lost[i]]--;
}
// ์ฒด์ก๋ณต ๋น๋ฆด์ ์๋์ง ์ฒดํฌ
for(int i=1; i<=n; i++){
// ์ฒด์ก๋ณต์ด ์๋ค๋ฉด
if(arr[i] == 0){
// ์์ ์ฒด์ก๋ณต์ด 2๊ฐ๋ผ๋ฉด ํ๋ ๋น๋ฆฌ๊ธฐ
if(arr[i-1]==2){
arr[i-1]--;
arr[i]++;
}
// ๋ค ํ์ธ ( ์์ ๋น๋ฆด๊ฒ ์๋ค๋ฉด )
else if(arr[i+1]==2){
arr[i+1]--;
arr[i]++;
}
}
}
// 0๋ณด๋ค ํฌ๋ฉด ์ฒด์ก๋ณต์ด ์๋ค๋ ์๋ฏธ
// ์ถ๋ ฅ
for(int i=1; i<=n; i++){
if(arr[i]>0) answer++;
}
return answer;
}
}
๐ค ๋์ ์๊ฐ
์ด ๋ฌธ์ ๋ greedy ๋ฌธ์ ์ด๋ค.
๊ธฐ์กด์ ์ฃผ์ด์ง ๋ฐฐ์ด์ ๊ฐ์ง๊ณ ๋น๊ตํด์ ํ์๋๋ฐ ์ฝ๋์ ์๋ฅผ ์ข ๋ ๊ฐ๋จํ๊ฒ ํ๊ธฐ ์ํ key๋ ํ์๋ฐฐ์ด์ +2 ํด์ if๋ฌธ์ ์ค์ด๋ ๊ฒ์ด๋ค.
๋ ์๋ค ํ์ธ์ ์ข ๋ ํธํ๊ฒ ํ๊ธฐ ์ํด +2๋ฅผ ์๊ฐํด๋๋ค.