๋ฌธ์ ์ฝ๊ฒ ์๊ฐํ๋๋ฐ, 4๋ฒ์งธ ์๋์์์ผ ์ฑ๊ณตํ๋ค.
๋์ ํ ๋ชจ๋ฅด๊ฒ ์ด์ ๊ฒฐ๊ตญ ๊ฒฐ์ ์ ์ธ ์์ด๋์ด๋ ์๋ ๋ธ๋ก๊ทธ์์ ์ฐธ๊ณ ํ๋ค.
์ฌํ๊ฒ๋ ๊ฑฐ์ ๋ณด๊ณ ์ ์ฝ๋๋ฅผ ์ผ๋๋ฐ๋ ๋ฐ๋ก ์ ๋ต์ด ์ ๋์๋ค.
์ฒซ ๋ฒ์งธ๋ ๋ฐํ์ ์๋ฌ ๋ฌ๋๋ฐ, ์ด์ง ํธ๋ฆฌ๋ผ๊ณ ์๊ฐํ๊ณ ํ์ด์ ๋๊ฑฐ๋ผ ์์ธํ ๋ณด์ง๋ ์์๊ณ
๋ ๋ฒ์งธ๋ getResult()
๋ฉ์๋์์ ์๋์ฒ๋ผ ์์๋
ธ๋์ ๊ฐ์๊ฐ 0์ด ์๋ ๋ ์นด์ดํธํ๋ผ๊ณ ์๋ชป ์ง์ ๋ฌ๋ค
private static int getResult() {
int cnt=0;
for(int i=0;i<N;i++) {
if(tree[i][0]!=removed && tree[i][1]!=0) cnt++;
}
return cnt;
}
์ธ ๋ฒ์งธ๋ ๋ฐ๋ก ๋ค ์ ๋ ฅํด๋ด๋ ํ๋ฆฐ ๊ฒ ์์ด์ ์ค๋ ๊ณ ๋ฏผํ๋ค.
๊ทธ๋ฌ๋ค๊ฐ ๋ฐ์ดํฐ ์ ๋ ฅ๋ฐ๋ ๋ถ๋ถ์์ ์ค๋ฅ๊ฐ ์๋ ๊ฑธ ๋ฐ๊ฒฌํ๋ค.
-1์ด ๋ค์ด์จ ๊ฒฝ์ฐ(๋ฃจํธ ๋
ธ๋์ธ ๊ฒฝ์ฐ)์๋ tree[i][0]
์ parent
๊ฐ์ ๋ฐ์์ฃผ์ด์ผ ์ ๊ฑฐ๋์์ด 0์ธ ๊ฒฝ์ฐ์ ๋ฃจํธ๋
ธ๋๊ฐ ์ ๊ฑฐ๋์ง ์๋๋ฐ, ๊ทธ ๋ก์ง์ ๊ฑด๋ ๋ฐ์ด ๋ฒ๋ ธ์ผ๋ ์๋ฌ๊ฐ ๋ ๊ฒ.
for(int i=0;i<N;i++) {
parent = Integer.parseInt(str[i]);
if(parent==-1) continue;
//ํ์ฌ tree์ 0๋ฒ์ parent ๊ฐ ๋ฃ๊ณ
tree[i][0] = parent;
//parent tree์ 1๋ฒ์ ์์๋
ธ๋ ๊ฐ์ ++
tree[parent][1]++;
}
์๋์ฒ๋ผ ์์๋ง ์ฎ๊ฒจ์ฃผ์๋๋ ๋ฐ๋ก ํต๊ณผํ๋ค.
for(int i=0;i<N;i++) {
parent = Integer.parseInt(str[i]);
//ํ์ฌ tree์ 0๋ฒ์ parent ๊ฐ ๋ฃ๊ณ
tree[i][0] = parent;
if(parent==-1) continue;
//parent tree์ 1๋ฒ์ ์์๋
ธ๋ ๊ฐ์ ++
tree[parent][1]++;
}
์ ์ฒด ์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int[][] tree;
static int N;
static int removed = -99;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine().trim());
tree = new int[N][2]; //0:๋ถ๋ชจ๋
ธ๋ ๋ฒํธ, 1:์์๋
ธ๋ ๊ฐ์
String[] str = br.readLine().trim().split(" ");
int parent;
for(int i=0;i<N;i++) {
parent = Integer.parseInt(str[i]);
if(parent==-1) continue;
//ํ์ฌ tree์ 0๋ฒ์ parent ๊ฐ ๋ฃ๊ณ
tree[i][0] = parent;
//parent tree์ 1๋ฒ์ ์์๋
ธ๋ ๊ฐ์ ++
tree[parent][1]++;
}
int remove = Integer.parseInt(br.readLine().trim());
removeNode(remove);
int result = getResult();
System.out.println(result);
}
private static int getResult() {
int cnt=0;
for(int i=0;i<N;i++) {
if(tree[i][0]!=removed && tree[i][1]==0) cnt++;
}
return cnt;
}
private static void removeNode(int remove) {
int parent = tree[remove][0];
if(parent!=-1) tree[parent][1]--; //๋ถ๋ชจ๋
ธ๋์ ์์์ --
tree[remove][0]= removed; //์ง์์ก๋ค๊ณ ํ์
if(tree[remove][1]!=0) { //์์๋
ธ๋๊ฐ ์กด์ฌํ๋ค๋ฉด
for(int i=0;i<N;i++) {
if(tree[i][0]==remove) {
removeNode(i);
}
}
}
}
}
'์๊ณ ๋ฆฌ์ฆ > ๋ฌธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฐ] ๋ฐฑ์ค 2667 - ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (0) | 2020.12.06 |
---|---|
[์๋ฐ] ๋ฐฑ์ค 2606 - ๋ฐ์ด๋ฌ์ค (0) | 2020.12.05 |
[์๋ฐ] ๋ฐฑ์ค 1260 - DFS์ BFS (0) | 2020.12.05 |
[์๋ฐ] ๋ฐฑ์ค 9372 - ์๊ทผ์ด์ ์ฌํ (0) | 2020.12.04 |
[์๋ฐ] ๋ฐฑ์ค 1167 - ํธ๋ฆฌ์ ์ง๋ฆ (0) | 2020.12.03 |