[백준/C++] 14267번 회사 문화 1

2022. 5. 13. 04:42· Koala - 6기/코딩테스트 준비 스터디
목차
  1. 소스코드
  2. 문제풀이

https://www.acmicpc.net/problem/14267

 

14267번: 회사 문화 1

영선회사에는 매우 좋은 문화가 있는데, 바로 상사가 직속 부하를 칭찬하면 그 부하가 부하의 직속 부하를 연쇄적으로 칭찬하는 내리 칭찬이 있다. 즉, 상사가 한 직속 부하를 칭찬하면 그 부하

www.acmicpc.net

 

문제분석

분류

DP, 그래프, 트리, bfs-dfs, 트리에서의 DP

문제 설명

영선회사에는 매우 좋은 문화가 있는데, 바로 상사가 직속 부하를 칭찬하면 그 부하가 부하의 직속 부하를 연쇄적으로 칭찬하는 내리 칭찬이 있다. 즉, 상사가 한 직속 부하를 칭찬하면 그 부하의 모든 부하들이 칭찬을 받는다.

모든 칭찬에는 칭찬의 정도를 의미하는 수치가 있는데, 이 수치 또한 부하들에게 똑같이 칭찬 받는다.

직속 상사와 직속 부하관계에 대해 주어지고, 칭찬에 대한 정보가 주어질 때, 각자 얼마의 칭찬을 받았는지 출력하시오,

입력

첫째 줄에는 회사의 직원 수 n명, 최초의 칭찬의 횟수 m이 주어진다. 직원은 1번부터 n번까지 번호가 매겨져 있다. (2 ≤ n, m ≤ 100,000)

둘째 줄에는 직원 n명의 직속 상사의 번호가 주어진다. 직속 상사의 번호는 자신의 번호보다 작으며, 최종적으로 1번이 사장이다. 1번의 경우, 상사가 없으므로 -1이 입력된다.

다음 m줄에는 직속 상사로부터 칭찬을 받은 직원 번호 i, 칭찬의 수치 w가 주어진다. (2 ≤ i ≤ n, 1 ≤ w ≤ 1,000)

사장은 상사가 없으므로 칭찬을 받지 않는다.

출력

1번부터 n번의 직원까지 칭찬을 받은 정도를 출력하시오.

소스코드

#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;

vector<int> v[100001];
int good[100001] = { 0, };
int n, m, i, w;

void dfs(int num) {
	for (int i = 0; i < v[num].size(); i++) {
		good[v[num][i]] += good[num];
		dfs(v[num][i]);
	}
}


int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		int tmp;
		cin >> tmp;
		if (i == 1)continue;
		v[tmp].push_back(i);
	}
	for (int j =0; j < m; j++) {
		cin >> i >> w;
		good[i] += w;
	}
	dfs(1);

	for (int i = 1; i <= n; i++) {
		cout << good[i] << ' ';
	}
	return 0;
}

문제풀이

입력이 10만이므로 단순한 bfs로는 풀지 못한다.

그렇다면 어떻게 접근할까? -> 내리 칭찬이라는 단어가 DP와 비슷하게 들려왔다

  • 칭찬의 양 w를 맨 앞부터 하나씩 더해주면 될 것 같다

1. 우선 인접리스트를 하나 선언한 뒤, 직원의 직속상사와 직원 본인의 order를 하나의 리스트가 되도록 입력받는다. 그러나 사장은 상사가 없으므로 과감하게 pass

ex) v[1][0] = 2(부장), v[2][0] = 3(차장), v[3][0] = 4(과장), v[4][0] = 5(대리)

2. 직원이 받는 칭찬의 양을 저장할 배열을 하나 선언 뒤, 입력받는다

3. dfs(1)을 실행한다 -> 왜 0부터 안하나면 사장은 상사가 없어서 pass 했기 때문

4. 어차피 v[num]의 size는 1이지만, dfs도 종료조건이 필요하므로 for문을 이용한다.

이 부분은 따로 종료조건을 설정해주어도 괜찮을 것 같다.

5. dfs(1)을 실행하면 v[1][0]은 2이므로, good[2] += good[1]( 2+= 0 )과 dfs(2)가 실행되고,

dfs(2)에서는 v[2][0] = 3이고 good[3] += good[2]( 4 += 2 )와 dfs(3)이 실행된다.

dfs(3)에서는 v[3][0] = 4이고 good[4] += good[3]( 0+= 6 )와 dfs(4)이 실행된다.

dfs(4)에서는 v[4][0] = 5이고 good[5] += good[4]( 6 += 6 )와 dfs(3)이 실행된다

6. 위처럼 앞 인덱스(=직속상사)가 가지고 있는 칭찬의 양이 계단식으로 더해져서 최종적으로는 good배열에 모든 직원의 칭찬의 양이 들어가게 된다.


https://github.com/oh2279/oh2279

 

GitHub - oh2279/oh2279

Contribute to oh2279/oh2279 development by creating an account on GitHub.

github.com

https://blog.naver.com/oh2279/222730620882

 

[백준/C++] 14267번 회사 문화 1

https://www.acmicpc.net/problem/14267 문제 분석 분류 DP, 그래프, 트리, bfs-dfs, 트리에서의 DP 문...

blog.naver.com

 

저작자표시 (새창열림)

'Koala - 6기 > 코딩테스트 준비 스터디' 카테고리의 다른 글

[백준 / python] 17390번: 이건 꼭 풀어야 해!  (0) 2022.05.15
[BOJ/python] 14502번 연구소  (0) 2022.05.13
[BOJ / Python] 1874 - 스택 수열  (0) 2022.05.09
[BOJ/python] 11286번 절댓값 힙  (0) 2022.05.09
[백준 / python] 11286번: 절댓값 힙  (0) 2022.05.08
  1. 소스코드
  2. 문제풀이
'Koala - 6기/코딩테스트 준비 스터디' 카테고리의 다른 글
  • [백준 / python] 17390번: 이건 꼭 풀어야 해!
  • [BOJ/python] 14502번 연구소
  • [BOJ / Python] 1874 - 스택 수열
  • [BOJ/python] 11286번 절댓값 힙
KauKoala
KauKoala
항공대 알고리즘 동아리 Koala 🥰
KauKoala
Koala
KauKoala
전체
오늘
어제
  • 분류 전체보기 (1888)
    • 공지 게시판 (10)
    • 정보 게시판 (8)
    • Codeforce (15)
    • acm-icpc (6)
    • Koala - 1기 (16)
    • Koala - 2기 (111)
      • Programming Contest (1)
      • A반 (20)
      • B반 (39)
      • C반 (22)
      • 기초 강의 (18)
    • Koala - 3기 (10)
      • 기초 스터디 (7)
    • Koala - 4기 (67)
    • Koala - 5기 (144)
      • 기초 알고리즘 스터디 (75)
      • 코딩테스트 준비 스터디 (68)
    • Koala - 6기 (102)
      • 기초 알고리즘 스터디 (75)
      • 코딩테스트 준비 스터디 (25)
      • 모의 테스트 스터디 (1)
    • Koala - 7기 (167)
      • 기초 알고리즘 스터디 (97)
      • 코딩테스트 준비 스터디 (68)
      • 모의 테스트 스터디 (1)
    • Koala - 8기 (44)
      • 기초 알고리즘 스터디 (32)
      • 코딩테스트 준비 스터디 (10)
      • 코드포스 버츄얼 스터디 (0)
      • 프로그래머스 LV2 스터디 (0)
    • Koala - 9기 (205)
      • 기초 알고리즘 스터디 (138)
      • 코딩테스트 준비 스터디 (64)
      • 모의테스트 준비 스터디 (1)
    • Koala - 10기 (117)
      • 기초 알고리즘 스터디 (30)
      • 코딩테스트 준비 스터디 (86)
      • 모의테스트 준비 스터디 (1)
    • Koala - 11기 (151)
      • 기초 알고리즘 스터디 (46)
      • 코딩테스트 준비 스터디 (104)
      • 모의테스트 준비 스터디 (1)
    • Koala - 12기 (86)
      • 기초 알고리즘 스터디 (31)
      • 코딩테스트 준비 스터디 (55)
    • Koala - 13기 (119)
      • 기초 알고리즘 스터디 (52)
      • 코딩테스트 준비 스터디 (67)
    • Koala - 14기 (116)
      • 기초 알고리즘 스터디 (39)
      • 코딩테스트 준비 스터디 (77)
    • Koala - 15기 (138)
      • 기초 알고리즘 스터디 (73)
      • 코딩테스트 준비 스터디 (65)
    • Koala - 16기 (47)
      • 코딩테스트 기초 스터디 (16)
      • 코딩테스트 심화 스터디 (31)
    • Koala - 17기 (62)
      • 코딩테스트 기초 스터디 (15)
      • 코딩테스트 심화 스터디 (47)
    • Koala - 18기 (31)
      • 코딩테스트 기초 스터디 (11)
      • 코딩테스트 심화 스터디 (20)
    • Koala - 19기 (42)
      • 코딩테스트 기초 스터디 (7)
      • 코딩테스트 심화 스터디 (35)
    • Koala - 20기 (0)
      • 코딩테스트 기초 스터디 (0)
      • 코딩테스트 심화 스터디 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 🐨항공대 알고리즘 학회 Koala 3기 모집
  • 🐨항공대 알고리즘 학회 Koala 2기 모집
  • 소모임 소개

인기 글

태그

  • dp
  • dfs
  • 백트래킹
  • BOJ
  • 백준
  • C++
  • 파이썬
  • BFS

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.3.0
KauKoala
[백준/C++] 14267번 회사 문화 1
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.