Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

7-dhlee777 #31

Merged
merged 3 commits into from
Apr 30, 2024
Merged

7-dhlee777 #31

merged 3 commits into from
Apr 30, 2024

Conversation

dhlee777
Copy link
Contributor

@dhlee777 dhlee777 commented Apr 8, 2024

πŸ”— 문제 링크

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

βœ”οΈ μ†Œμš”λœ μ‹œκ°„

3μ‹œκ°„

✨ μˆ˜λ„ μ½”λ“œ

n개의수 쀑에 m개의 수λ₯Ό 골라 μˆœμ—΄μ„ λ§Œλ“œλŠ” λ¬Έμ œμ΄λ‹€. μ‘°ν•©μ˜ κ²½μš°μ—λŠ” μˆœμ„œκ°€ μƒκ΄€μ—†μœΌλ―€λ‘œ visited μ—¬λΆ€λ§Œ 확인해쀀 λ‹€μŒ 좜λ ₯ν•΄μ£Όλ©΄ λ˜μ§€λ§Œ μˆœμ—΄μ€ μˆœμ„œκ°€ μžˆκΈ°μ— vector에 λ°©λ¬Έμˆœμ„œλŒ€λ‘œ 수λ₯Ό λ„£μ–΄μ€€λ‹€μŒ 좜λ ₯ν•΄μ€€λ‹€. 이 λ¬Έμ œμ—μ„œ μ£Όμ˜ν• μ μ€ μˆ«μžκ°€ μ •λ ¬μ΄μ•ˆλœμƒνƒœμ΄λ―€λ‘œ 숫자λ₯Ό μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œλ’€ 탐색을 진행해쀀닀.

λ©”μΈμ½”λ“œ

int num_size, picked_size;
int num[8];   //μž…λ ₯받은 μˆ«μžλ“€μ„ μ €μž₯ν•˜λŠ” λ°°μ—΄
bool visited[8];  //λ°©λ¬Έν–ˆλŠ”μ§€ ν™•μΈν•˜κΈ°μœ„ν•œ λ°°μ—΄
vector<int>v;  //μˆ«μžλ“€μ„ μˆœμ„œλŒ€λ‘œ λ„£κΈ°μœ„ν•œ 벑터
int main(void) {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin >> num_size >> picked_size;
	for (int i = 0; i < num_size; i++) {
		cin >> num[i];
	}
	sort(num, num + num_size);  //μž…λ ₯받은 μˆ˜λŠ” λ’€μ£½λ°•μ£½μ΄λ―€λ‘œ μ˜€λ¦„μ°¨μˆœ 정렬을 μ‹œμΌœμ€€λ‹€.
	dfs(0,0);
}

1.μ „μ²΄μˆ˜μ˜ 개수 num_size, 뽑을 수의 개수 picked_size λ₯Όμž…λ ₯λ°›λŠ”λ‹€
2.for문을 톡해 numλ°°μ—΄λ‘œ num_size만큼 μˆ˜λ“€μ„ μž…λ ₯λ°›λŠ”λ‹€.
3.μž…λ ₯받은 μˆ˜λ“€μ€ λ’€μ£½λ°•μ£½μ΄λ―€λ‘œ μ‚¬μ „μˆœ μ •λ ¬μ„μœ„ν•΄ sortν•¨μˆ˜λ₯Ό 톡해 num배열을 μ˜€λ¦„μ°¨μˆœμ •λ ¬μ„ ν•΄μ€€λ‹€.
4.0λ²ˆμ¨°μˆ«μžλΆ€ν„° dfs진행

bfsμ½”λ“œ

int num_size, picked_size;
int num[8];   //μž…λ ₯받은 μˆ«μžλ“€μ„ μ €μž₯ν•˜λŠ” λ°°μ—΄
bool visited[8];  //λ°©λ¬Έν–ˆλŠ”μ§€ ν™•μΈν•˜κΈ°μœ„ν•œ λ°°μ—΄
vector<int>v;  //μˆ«μžλ“€μ„ μˆœμ„œλŒ€λ‘œ λ„£κΈ°μœ„ν•œ 벑터
void dfs(int cnt,int vt) {  //cntλŠ” 방문숫자 μΉ΄μš΄νŒ…,vtλŠ” ν˜„μž¬ 숫자λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.
	if (cnt == picked_size) {  // λ°©λ¬Έν•œ μˆ˜μ™€ 뽑아야 ν•  κ°œμˆ˜κ°€ κ°™μ€κ²½μš°,dfs(3,2)일 경우 μ…‹μ§Έμžλ¦¬μˆ˜κ°€ num[2]μΌλ•Œμ˜ μˆ˜μ—΄λ“€μ„ 좜λ ₯ν•΄μ£ΌλŠ” ν•¨μˆ˜ 

		for (auto k : v) {
			cout << k << " ";    //벑터에 μžˆλŠ” μˆ˜μ—΄μ„ 좜λ ₯
		}
		cout << "\n";
	}
	for (int j = 0; j < num_size; j++) {  //쑰합이 μ•„λ‹ˆλΌ μˆ˜μ—΄μ΄λ―€λ‘œ 인덱슀0λΆ€ν„° νƒμƒ‰μ‹œμž‘
		if (!visited[j]) {          //num[j]λ₯Ό λ°©λ¬Έν•˜μ§€ μ•Šμ•˜λ‹€λ©΄
			visited[j] = true;      //λ°©λ¬Έ ν‘œμ‹œλ₯Ό ν•˜μ—¬μ£Όκ³ 
			v.push_back(num[j]);  //벑터에 κ·Έ 수λ₯Ό λ„£μ–΄μ€€λ‹€.
			dfs(cnt + 1,j);  //카운트λ₯Ό 올렀주고 jλ‘œμ΄λ™ν•΄ λ‹€μ‹œ 탐색진행
			v.pop_back();     //탐색이 끝났닀면 λ²‘ν„°λμ—μ„œ 수 ν•˜λ‚˜λ₯Ό λΉΌμ€€λ‹€.
			visited[j] = false;  //λ‹€λ₯Έ 경우λ₯Όμœ„ν•΄ jλ₯Ό λ°©λ¬Έμ•ˆν–ˆλ‹€κ³  λ°”κΏ”μ€€λ‹€.
		}
	}
}

1.for문을 톡해 λ°©λ¬Έν•˜μ§€ μ•Šμ€μ •μ μœΌλ‘œ 탐색을 진행해쀀닀.
2.탐색에 μ„±κ³΅ν•˜λ©΄ visited[]=true둜 λ°©λ¬Έν‘œμ‹œλ₯Ό ν•˜κ³  νƒμƒ‰ν•œ 수λ₯Ό 벑터에 λ„£μ–΄μ€€λ‹€.(μˆœμ„œκ°€μžˆλŠ” μˆœμ—΄μ΄κΈ°μ— μ°¨λ‘€λŒ€λ‘œ 벑터에 λ„£μ–΄μ€€λ‹€.)
2.λ½‘μ•„μ•Όν•˜λŠ” 숫자만큼 탐색을 λ‹€ ν•΄μ€€κ²½μš° 벑터에 μžˆλŠ” λ°©λ¬Έν•œ 수λ₯Ό μˆœμ„œλŒ€λ‘œ 좜λ ₯ν•΄μ€€λ‹€(μˆ˜μ—΄ 좜λ ₯)
3.탐색을 μ™„λ£Œν•œν›„ λ‹€λ₯Έ 탐색을 μœ„ν•΄ v.pop_bakc()으둜 수λ₯Ό ν•˜λ‚˜ λΉΌμ£Όκ³  visited[]=false둜 λ°”κΏ”μ€€λ‹€.

πŸ“š μƒˆλ‘­κ²Œ μ•Œκ²Œλœ λ‚΄μš©

dfsμ—μ„œ λ§€κ°œλ³€μˆ˜λ₯Ό cnt,vt λ‘κ°œλ₯Ό λ‘μ—ˆμ§€λ§Œ ν’€κ³ λ‚˜μ„œ λ³΄λ‹ˆ cnt만 μžˆμ–΄λ„ μƒκ΄€μ—†λ‹€λŠ” 것을 κΉ¨λ‹¬μ•˜λ‹€. ν•˜μ§€λ§Œ ν˜„μž¬ μ–΄λŠ 정점에
μžˆλŠ”μ§€ μ§κ΄€μ μœΌλ‘œ λ³Ό 수 μžˆμ—ˆλ‹€.

Copy link
Collaborator

@InSange InSange left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

μž‘μ€ κ°’λΆ€ν„° 순차적으둜 λ‚˜μ—΄ν•΄μ£ΌκΈ° μœ„ν•΄μ„œ 정렬을 ν•˜κ³  ν•˜λ‚˜μ”© λ°©λ¬Έν•΄κ°€λ©΄μ„œ 기쑴에 λ°©λ¬Έν–ˆλŠ”μ§€ μ—¬λΆ€λ₯Ό μ²΄ν¬ν•˜λ©΄μ„œ μž¬κ·€μ μœΌλ‘œ 잘 μž‘μ•„μ£Όμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€!
λ‹΅μ˜ κ°œμˆ˜λŠ” N!둜 μ—¬κΈ°μ„œλŠ” μ΅œλŒ€ 8개의 μ›μ†Œλ₯Ό 가지고 μ§„ν–‰ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 그럼 μ΅œλŒ€ κ°œμˆ˜λŠ” 8!둜 40,320번의 연산을 μ‹€ν–‰ν•˜κ² κ΅°μš”?
λ§Œμ•½ 100개 μ΄μƒμœΌλ‘œ μ§„ν–‰λœλ‹€λ©΄ μ–΄λ–€ λ°©μ‹μœΌλ‘œ μ ‘κ·Όν•΄μ„œ ν’€μ–΄μ•Όλ κΉŒμš”?

@yuyu0830
Copy link
Collaborator

μž‘μ€ κ°’λΆ€ν„° 순차적으둜 λ‚˜μ—΄ν•΄μ£ΌκΈ° μœ„ν•΄μ„œ 정렬을 ν•˜κ³  ν•˜λ‚˜μ”© λ°©λ¬Έν•΄κ°€λ©΄μ„œ 기쑴에 λ°©λ¬Έν–ˆλŠ”μ§€ μ—¬λΆ€λ₯Ό μ²΄ν¬ν•˜λ©΄μ„œ μž¬κ·€μ μœΌλ‘œ 잘 μž‘μ•„μ£Όμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€! λ‹΅μ˜ κ°œμˆ˜λŠ” N!둜 μ—¬κΈ°μ„œλŠ” μ΅œλŒ€ 8개의 μ›μ†Œλ₯Ό 가지고 μ§„ν–‰ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 그럼 μ΅œλŒ€ κ°œμˆ˜λŠ” 8!둜 40,320번의 연산을 μ‹€ν–‰ν•˜κ² κ΅°μš”? λ§Œμ•½ 100개 μ΄μƒμœΌλ‘œ μ§„ν–‰λœλ‹€λ©΄ μ–΄λ–€ λ°©μ‹μœΌλ‘œ μ ‘κ·Όν•΄μ„œ ν’€μ–΄μ•Όλ κΉŒμš”?

였우 그건 저도 μ–΄λ €μšΈ 것 κ°™μ€λ°μš”

Copy link
Collaborator

@yuyu0830 yuyu0830 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 ν’€μ–΄λ΄€λ˜ 문제길래 제 μ½”λ“œλž‘ λΉ„κ΅ν•˜λ €κ³  λ΄€λ”λ‹ˆ 제 μ½”λ“œλž‘ μ™„μ „ λΉ„μŠ·ν•΄μ„œ λ†€λžμŠ΅λ‹ˆλ‹€! κΉ”λ”ν•˜κ²Œ DFS둜 잘 ν•΄κ²°ν•˜μ‹  것 κ°™μ•„μš”!

dfs ν•¨μˆ˜μ˜ int vt νŒŒλΌλ―Έν„°λŠ” κ²°κ΅­ λκΉŒμ§€ μ‚¬μš©λ˜μ§€ μ•Šμ•˜κ΅°μš”..

Copy link
Collaborator

@seongwon030 seongwon030 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

μˆœμ—΄μ΄λΌ 벑터에 μ €μž₯ν•˜μ—¬ λ°©λ¬Έμ—¬λΆ€λ₯Ό μ²΄ν¬ν–ˆκ΅°μš” γ…Žγ…Ž 저도 μ„ μš°λ‹˜μ΄ λ§μ”€ν•˜μ‹  μˆ˜κ°€ μ—„μ²­ μ»€μ‘Œμ„ λ•Œ μ–΄λ–€ 방법을 μ‚¬μš©ν•΄μ•Όν•˜λŠ”μ§€ κ°‘μžκΈ° κΆκΈˆν•΄μ‘Œλ„€μš” λ¨Όκ°€ dp일 것 같기도 ν•˜κ³ .. ν”Όμ•Œ 잘 λ΄€μŠ΅λ‹ˆλ‹€

@dhlee777 dhlee777 merged commit 892dce2 into main Apr 30, 2024
@dhlee777 dhlee777 deleted the 7-dhlee777 branch April 30, 2024 11:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants