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

4-mong3125 #15

Merged
merged 2 commits into from
Feb 25, 2024
Merged

4-mong3125 #15

merged 2 commits into from
Feb 25, 2024

Conversation

mong3125
Copy link
Collaborator

πŸ”— 문제 링크

μ—°κ²° μš”μ†Œμ˜ 개수

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

30뢄정도 κ±Έλ ΈμŠ΅λ‹ˆλ‹€.

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

문제 μ„€λͺ…

λ…Έλ“œμ™€ 엣지λ₯Ό μž…λ ₯으둜 λ°›μŠ΅λ‹ˆλ‹€.
이 λ•Œ μš°λ¦¬λŠ” μ—°κ²° μš”μ†Œμ˜ 개수λ₯Ό μ„Έμ•Όν•˜λŠ”λ° μ—°κ²° μš”μ†Œκ°€ 뭔지 λͺ°λΌμ„œ μ—°κ²° μš”μ†ŒλΆ€ν„° μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄μ„œ μ„€λͺ…을 ν•˜μžλ©΄ λ…Έλ“œλŠ” 섬, μ—£μ§€λŠ” 닀리라고 μƒκ°ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. κ·Έ λ•Œ μ—°κ²°λ˜μ–΄μžˆλŠ” 덩어리듀이 μ—°κ²° μš”μ†Œμž…λ‹ˆλ‹€.
예제 1번 같은 κ²½μš°λŠ”
image
(1,2,5),(3,4) μ΄λ ‡κ²Œ 두 λ©μ–΄λ¦¬λ‘œ 이동할 수 μžˆμŠ΅λ‹ˆλ‹€.

κ·Έλ ‡λ‹€λ©΄ λ–¨μ–΄μ €μžˆλŠ” 덩어리 개수λ₯Ό μ„ΈλŠ”κ²Œ λ¬Έμ œκ°€ μ œμ‹œν•œ λͺ©ν‘œλΌκ³  λ³Ό 수 있죠.

예제 2λ²ˆμ€ 덩어리가 ν•˜λ‚˜μž…λ‹ˆλ‹€.
image

ν•΄κ²°κ³Όμ •

1. μž…λ ₯을 μ–΄λ–»κ²Œ λ°›μ•„μ•Ό ν• κΉŒ??

μ²˜μŒμ—λŠ” NodeλΌλŠ” 클래슀λ₯Ό λ§Œλ“€μ–΄μ„œ ν•΄κ²°ν•˜λ €κ³  ν–ˆμŠ΅λ‹ˆλ‹€. μ—°κ²°λ¦¬μŠ€νŠΈ ν˜•μ‹μœΌλ‘œ κ΅¬ν˜„μ„ ν•œ 뒀에 DFS λ°©μ‹μœΌλ‘œ ν’€λ €κ³  ν–ˆμ–΄μš”.
image

ν•˜μ§€λ§Œ 엣지λ₯Ό μ—°κ²°ν•˜λŠ”λ° μ‹œκ°„μ΄ λ„ˆλ¬΄ 였래 μ†Œμš”κ°€ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ™œλƒλ©΄ λ…Έλ“œλ‘œ 이뀄진 객체 배열을 μ„ μ–Έν•˜κ³  객체 λ°°μ—΄ μ•ˆμ—μ„œ 객체λ₯Ό μ°Ύμ•„μ„œ 엣지에 λ„£μ–΄μ€˜μ•Ό ν•˜κΈ° λ•Œλ¬Έμ΄μ£ .

뭔말인고 ν•˜λ‹ˆ μœ„ μ‚¬μ§„μ—μ„œ edges에 μΆ”κ°€ν•˜λ €κ³  ν•˜λ©΄ μƒˆλ‘œ μƒμ„±ν•΄μ„œ μΆ”κ°€ν•˜λŠ”κ²Œ μ•„λ‹ˆκ³  기쑴에 μƒμ„±λœ λ°°μ—΄μ—μ„œ 객체λ₯Ό κΊΌλ‚΄μ™€μ„œ λ„£μ–΄μ€˜μ•Όν•©λ‹ˆλ‹€. λ©”λͺ¨λ¦¬ μ˜€λ²„ν—€λ“œλ„ 생기고 κ³Όμ •μžμ²΄κ°€ λ§€λ„λŸ½μ§€ λͺ»ν•©λ‹ˆλ‹€.

κ·Έλž˜μ„œ μƒˆλ‘œμš΄ λ°©λ²•μœΌλ‘œ 엣지가 μ—°κ²°λ˜μ–΄μžˆλŠ”μ§€ μ•„λ‹Œμ§€ true false둜 λ‚˜νƒ€λ‚΄μ£ΌλŠ” λ‹€μŒκ³Ό 같은 λ°°μ—΄λ‘œ ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.
image
image
(λ°©ν–₯이 μƒκ΄€μ—†λŠ” κ·Έλž˜ν”„λΌμ„œ μ–‘λ°©ν–₯으둜 μ„€μ •ν•΄μ€¬μŠ΅λ‹ˆλ‹€)

이러면 μž…λ ₯이 훨씬 κ°„νŽΈν•΄μ§€μ£ .

2. DFS μ•Œκ³ λ¦¬μ¦˜ 적용

이제 μž…λ ₯을 λ‹€ λ°›μ•„μ™”μœΌλ‹ˆ 문제λ₯Ό ν•΄κ²°ν•΄λ΄…μ‹œλ‹€.
DFSλŠ” μ•„λž˜μ™€ 같이 νƒμƒ‰ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.
image

μ΄λ ‡κ²Œ λ…Έλ“œμ— μ—°κ²°λ˜μ–΄μžˆλŠ” 엣지λ₯Ό κ±΄λ„ˆ λ…Έλ“œλ“€μ„ 더 깊게 νƒμƒ‰ν•©λ‹ˆλ‹€.

이 방법은 forλ¬Έκ³Ό μž¬κ·€ν•¨μˆ˜λ‘œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
for문이 λ¨Όμ € λŒκΈ°μ „μ— μž¬κ·€ν•¨μˆ˜λ‘œ 깊게 깊게 λ“€μ–΄κ°€μ£  ν•˜λ‚˜μ˜ μž¬κ·€ν•¨μˆ˜κ°€ λ‹€ λμ΄λ‚˜λ©΄ 즉, 깊게 갈 수 μžˆλŠ” κ³³κΉŒμ§€ κ°€μ„œ λ§‰ν˜€μ„œ λμ΄λ‚˜λ©΄ for문에 μ˜ν•΄μ„œ λ‹€μŒλ²ˆμ§Έ dfsν•¨μˆ˜κ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.
image

그럼 이제 dfs둜 탐색을 ν•˜λ©΄μ„œ μ˜μ—­ ν‘œμ‹œλ₯Ό ν•΄μ£Όκ² μŠ΅λ‹ˆλ‹€. 이λ₯Ό μ €λŠ” cacheλΌλŠ” 배열을 ν†΅ν•΄μ„œ κ΅¬ν˜„μ„ ν–ˆλŠ”λ°μš”.

μ²˜μŒμ— λ³΄μ—¬λ“œλ¦° 예제 사진1을 λ³΄μ‹œλ©΄μ„œ μ„€λͺ…을 λ“€μ–΄μ£Όμ„Έμš”. λ‹€μŒμ—λŠ” 그림도 그렀보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.

cacheλŠ” 이전에 λ°©λ¬Έν•œμ μ΄ μžˆλŠ”μ§€ μ—¬λΆ€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ°°μ—΄μž…λ‹ˆλ‹€.
image

  1. μš°μ„  1을 κ°€λ©΄ cache[1]에true둜 ν‘œμ‹œλ₯Ό ν•΄μ€λ‹ˆλ‹€.
    image
    κ·Έ λ‹€μŒμ— 1의 첫번째 엣지λ₯Ό κ±΄λ„ˆ 2λ₯Ό λ°©λ¬Έν•˜κ²Œ 되면 cache[2]에도 true둜 ν‘œκΈ°λ₯Ό ν•΄μ£Όκ³  2의 첫번째 엣지인 5λ₯Ό λ°©λ¬Έν•˜λ©΄ cache[5]에도 true둜 ν‘œκΈ°λ₯Ό ν•΄μ€λ‹ˆλ‹€. 이후 5의 엣지λ₯Ό λ°©λ¬Έν•˜λ©΄ 1을 λ§Œλ‚˜κ²Œ λ˜λŠ”λ° 이 λ…Έλ“œλŠ” cacheλ₯Ό λ³΄λ‹ˆ true둜 μ ν˜€μžˆμŠ΅λ‹ˆλ‹€. λ©ˆμΆ”μ£ . κ·Έ λ‹€μŒ 2의 λ‹€μŒ 엣지인 1을 λ°©λ¬Έν•©λ‹ˆλ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ trueμ£  멈μΆ₯λ‹ˆλ‹€. 1의 λ‹€μŒ 엣지인 2도 λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€. 이 κ³Όμ •μ—μ„œ 엣지λ₯Ό 톡해 갈 수 μžˆλŠ” λͺ¨λ“  곳을 λ‹€ λ‘˜λŸ¬λ³΄κ²Œ λ©λ‹ˆλ‹€.
  2. κ·Έ λ‹€μŒμ— 2λ₯Ό νƒμƒ‰ν•©λ‹ˆλ‹€ cache[2]λ₯Ό λ³΄λ‹ˆ trueμž…λ‹ˆλ‹€. λ°”λ‘œ 멈μΆ₯λ‹ˆλ‹€.
  3. κ·Έ λ‹€μŒμ—” 3을 νƒμƒ‰ν•˜λŠ”λ° cache[3]을 λ³΄λ‹ˆ falseμž…λ‹ˆλ‹€. 탐색을 μ‹œμž‘ν•΄μ•Όκ² κ΅°μš”. 1번처럼 과정을 μˆ˜ν–‰ν•©λ‹ˆλ‹€. κ·Έ 결과둜 cache[4]에도 μˆ«μžκ°€ μ ν˜€μ§‘λ‹ˆλ‹€.
  4. 4λ₯Ό νƒμƒ‰ν•©λ‹ˆλ‹€. cacheκ°€ trueμž…λ‹ˆλ‹€. 멈μΆ₯λ‹ˆλ‹€.
  5. 5λ₯Ό νƒμƒ‰ν•©λ‹ˆλ‹€. cacheκ°€ trueμž…λ‹ˆλ‹€. 멈μΆ₯λ‹ˆλ‹€.

μœ„ 과정을 보닀보면 μ‹œμž‘ν•  λ•Œ λ©ˆμΆ”λ©΄ μ—°κ²° μš”μ†Œκ°€ μƒˆλ‘­κ²Œ μΆ”κ°€λ˜μ§€ μ•Šκ³  μ‹œμž‘ν•  λ•Œ λ©ˆμΆ”μ§€ μ•ŠμœΌλ©΄ 즉 cache에 0이 μ €μž₯λ˜μ–΄μžˆλ‹€λ©΄ μ—°κ²° μš”μ†Œκ°€ 좔가됨을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό ν†΅ν•΄μ„œ μ—°κ²° μš”μ†Œλ₯Ό μ‰½κ²Œ 샐 수 μžˆκ² λ„€μš”. κ΅¬ν˜„ν•΄λ΄…μ‹œλ‹€.
image

μ΄λ ‡κ²Œ 되면 이제 trueλ₯Ό λ°˜ν™˜ν•  λ•Œλ§Œ κ°œμˆ˜μ— μΆ”κ°€λ₯Ό ν•΄μ£Όλ©΄ λ˜κ² μŠ΅λ‹ˆλ‹€.
image

이제 countλ₯Ό 좜λ ₯ν•΄μ£ΌκΈ°λ§Œ ν•˜λ©΄ λ¬Έμ œκ°€ ν•΄κ²°λ©λ‹ˆλ‹€.

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

이전에 λ°°μ› λ˜ λ‚΄μš©μΈλ° 사싀 μ˜€λžœλ§Œμ— μ•Œκ³ λ¦¬μ¦˜μ„ μž‘μ•„μ„œ 기얡을 더듬어 κ°€λ©° μ΄λž¬μ—ˆμ§€ μ €λž¬μ—ˆμ§€ ν•˜λŠ”κ²Œ μ»ΈμŠ΅λ‹ˆλ‹€.

같이 곡뢀λ₯Ό ν•˜λ €κ³  ν•˜λ‹ˆ λ§ˆν¬μ—… 문법을 μ’€ κ³΅λΆ€ν•΄μ•Όκ² λ„€μš”. 보기 λΆˆνŽΈν•˜κ²Œ μ μ–΄μ„œ μ£„μ†‘ν•©λ‹ˆλ‹€. λ‹€μŒλΆ€ν„°λŠ” λ”°λ‘œ μˆ˜λ„μ½”λ“œλ§ŒμœΌλ‘œ μ‰½κ²Œμ‰½κ²Œ μ„€λͺ…ν•˜λ €κ³  λ…Έλ ₯ν•΄λ³Όκ²Œμš” 😒

@mong3125 mong3125 changed the title λ°±μ€€ 11724번 μ—°κ²° μš”μ†Œμ˜ 개수 java solution 4-mong3125 Feb 22, 2024
Copy link
Member

@kjs254 kjs254 left a comment

Choose a reason for hiding this comment

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

vector와 edge둜 이루어진 κ·Έλž˜ν”„ μžλ£Œκ΅¬μ‘°κ°€ λ°”λ‘œ λ– μ˜€λ₯΄λŠ” λ¬Έμ œλ„€μš”

깊이 μš°μ„  νƒμƒ‰μœΌλ‘œ 각 엣지에 μ ‘κ·Όν•˜μ‹œλŠ” 것과 μ–‘λ°©ν–₯인 κ²ƒκΉŒμ§€ λ†“μΉ˜μ§€ μ•Šκ³  κ³ λ €ν•˜μ‹  점이 μΈμƒκΉŠμ—ˆμŠ΅λ‹ˆλ‹€.

[Algorithm] 자료ꡬ쑰 κ·Έλž˜ν”„(Graph)λž€ 무엇인가?

μœ„ λ¬Έμ„œμ—μ„œ κ·Έλž˜ν”„μ— λŒ€ν•œ μ„€λͺ…이 κ°„λž΅ν•˜κ²Œ 잘 λ˜μ–΄μžˆλŠ”κ²ƒ κ°™μ•„μ„œ ν•œλ²ˆ κ°€μ Έμ™€λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

κ³ μƒν•˜μ…¨μŠ΅λ‹ˆλ‹€~~

Copy link
Collaborator

@YIM2UL2ET YIM2UL2ET left a comment

Choose a reason for hiding this comment

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

μ„€λͺ… ν•΄μ£Όμ‹ κ±Έ λ³΄λ‹ˆ μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜λŒ€λ‘œ λŒμ•„κ°€λŠ”μ§€ λŒ€λž΅μ μœΌλ‘œ 이해가 κ°€λ„€μš”. 마침 bfs와 dfs κ³΅λΆ€μ€‘μ΄μ—ˆλŠ”λ° μ–΄λ–€ μ‹μœΌλ‘œ μ½”λ“œλ₯Ό μ§œλŠ”μ§€ 아이디어 잘 μ–»μ–΄κ°‘λ‹ˆλ‹€. μˆ˜κ³ ν•˜μ…¨μŠ΅λ‹ˆλ‹€.

Copy link
Collaborator

@rivkms rivkms left a comment

Choose a reason for hiding this comment

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

μ˜€λžœλ§Œμ— μžλ°”λ‘œ μž‘μ„±λœ μ½”λ“œλ₯Ό λ³΄λ‹ˆ μž¬λ°Œλ„€μš” γ…Žγ…Ž

μ €λŠ” 이 문제λ₯Ό 봀을 λ•Œ linked-listλ₯Ό μ΄μš©ν•΄μ„œ 문제λ₯Ό 풀어야겠닀라고 μƒκ°ν–ˆμ—ˆμŠ΅λ‹ˆλ‹€.
λ…Έλ“œλ“€μ„ μ €μž₯ν•  λ•Œ ν•΄λ‹Ή 그룹의 λŒ€μž₯(ν•΄λ‹Ή κ·Έλ£Ήμ—μ„œ 맨 μ²˜μŒμ— μ ‘κ·Όλ˜λŠ” μš”μ†Œ)이 이미 μžˆλ‹€λ©΄, ν•΄λ‹Ή λŒ€μž₯에 linked-listλ₯Ό μ—°κ²°μ‹œν‚€κ³ ,
μžμ‹ μ˜ 그룹의 λŒ€μž₯이 μ—†λ‹€λ©΄ μžμ‹ μ΄ λŒ€μž₯이 λ˜μ–΄ μƒˆλ‘œμš΄ linked-listλ₯Ό λ§Œλ“œλŠ” 방식을 μ‚¬μš©ν•΄λ³΄μ•˜μ„ 것 κ°™μŠ΅λ‹ˆλ‹€.
λ¬Όλ‘  아직 ν”„λ‘œκ·Έλž˜λ° 해보지 μ•Šμ•„ κ²°κ³Όλ₯Ό λͺ¨λ₯΄μ§€λ§Œ, 이 방법이 λ¨Όμ € λ– μ˜¬λžμŠ΅λ‹ˆλ‹€.

λ¬Όλ‘  DFSλŠ” 생각을 λͺ»ν–ˆμ—ˆλŠ”데 μƒˆλ‘œμš΄ 방법을 μ•Œ 수 μžˆμ–΄μ„œ μ’‹μ•˜μŠ΅λ‹ˆλ‹€.

첫 PR μˆ˜κ³ ν•˜μ…¨μŠ΅λ‹ˆλ‹€ 😁

@mong3125
Copy link
Collaborator Author

linked-list 방법도 κ°€λŠ₯ν•  것 같은데 μ–΄λŠ 것이 더 νš¨μœ¨μ μΌμ§€λŠ” μ’€ 더 생각해봐야 될 것 κ°™λ„€μš”. μƒˆλ‘œμš΄ μ‹œκ°μ—μ„œ 의견 μ œμ‹œν•΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!!

@mong3125 mong3125 merged commit 9785ac4 into main Feb 25, 2024
@mong3125 mong3125 deleted the 4-mong3125 branch February 25, 2024 15:42
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