[programmers] νŠœν”Œ - Java

νŠœν”Œμ„ ν‘œν˜„ν•˜λŠ” λ¬Έμžμ—΄ sκ°€ μ£Όμ–΄μ§ˆ λ•Œ, sλ₯Ό λ°°μ—΄λ‘œ λ³€ν™˜ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€. 주어진 λ¬Έμžμ—΄μ—μ„œ {{, }}λ₯Ό μ œκ±°ν•˜κ³  },{λ₯Ό κ΅¬λΆ„μžλ‘œ λΆ„ν• ν•œ ν›„, λΆ„ν• ν•œ λ¬Έμžμ—΄μ„ 길이λ₯Ό κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•©λ‹ˆλ‹€. κ·Έ ν›„ 각 λ¬Έμžμ—΄μ„ ,λ₯Ό κ΅¬λΆ„μžλ‘œ λΆ„ν• ν•˜μ—¬ μ •μˆ˜λ₯Ό μΆ”μΆœν•˜κ³ , ν•œ λ²ˆλ„ λ“±μž₯ν•˜μ§€ μ•Šμ€ 수λ₯Ό λ¦¬μŠ€νŠΈμ— μΆ”κ°€ν•©λ‹ˆλ‹€.
DriedPollack's avatar
Mar 17, 2024
[programmers] νŠœν”Œ - Java

νŠœν”Œ

문제 μ„€λͺ…

μ…€μˆ˜μžˆλŠ” μˆ˜λŸ‰μ˜ μˆœμ„œμžˆλŠ” μ—΄κ±° λ˜λŠ” μ–΄λ–€ μˆœμ„œλ₯Ό λ”°λ₯΄λŠ” μš”μ†Œλ“€μ˜ λͺ¨μŒμ„ νŠœν”Œ(tuple)이라고 ν•©λ‹ˆλ‹€. n개의 μš”μ†Œλ₯Ό 가진 νŠœν”Œμ„ n-νŠœν”Œ(n-tuple)이라고 ν•˜λ©°, λ‹€μŒκ³Ό 같이 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • (a1, a2, a3, ..., an)
νŠœν”Œμ€ λ‹€μŒκ³Ό 같은 μ„±μ§ˆμ„ 가지고 μžˆμŠ΅λ‹ˆλ‹€.
  1. μ€‘λ³΅λœ μ›μ†Œκ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. ex : (2, 3, 1, 2)
  1. μ›μ†Œμ— 정해진 μˆœμ„œκ°€ 있으며, μ›μ†Œμ˜ μˆœμ„œκ°€ λ‹€λ₯΄λ©΄ μ„œλ‘œ λ‹€λ₯Έ νŠœν”Œμž…λ‹ˆλ‹€. ex : (1, 2, 3) β‰  (1, 3, 2)
  1. νŠœν”Œμ˜ μ›μ†Œ κ°œμˆ˜λŠ” μœ ν•œν•©λ‹ˆλ‹€.
μ›μ†Œμ˜ κ°œμˆ˜κ°€ n개이고, μ€‘λ³΅λ˜λŠ” μ›μ†Œκ°€ μ—†λŠ” νŠœν”Œ (a1, a2, a3, ..., an)이 μ£Όμ–΄μ§ˆ λ•Œ(단, a1, a2, ..., an은 μžμ—°μˆ˜), μ΄λŠ” λ‹€μŒκ³Ό 같이 집합 기호 '{', '}'λ₯Ό μ΄μš©ν•΄ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • {{a1}, {a1, a2}, {a1, a2, a3}, {a1, a2, a3, a4}, ... {a1, a2, a3, a4, ..., an}}
예λ₯Ό λ“€μ–΄ νŠœν”Œμ΄ (2, 1, 3, 4)인 경우 μ΄λŠ”
  • {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}
와 같이 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ, 집합은 μ›μ†Œμ˜ μˆœμ„œκ°€ λ°”λ€Œμ–΄λ„ μƒκ΄€μ—†μœΌλ―€λ‘œ
  • {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}
  • {{2, 1, 3, 4}, {2}, {2, 1, 3}, {2, 1}}
  • {{1, 2, 3}, {2, 1}, {1, 2, 4, 3}, {2}}
λŠ” λͺ¨λ‘ 같은 νŠœν”Œ (2, 1, 3, 4)λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
νŠΉμ • νŠœν”Œμ„ ν‘œν˜„ν•˜λŠ” 집합이 λ‹΄κΈ΄ λ¬Έμžμ—΄ sκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, sκ°€ ν‘œν˜„ν•˜λŠ” νŠœν”Œμ„ 배열에 λ‹΄μ•„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

[μ œν•œμ‚¬ν•­]

  • s의 κΈΈμ΄λŠ” 5 이상 1,000,000 μ΄ν•˜μž…λ‹ˆλ‹€.
  • sλŠ” μˆ«μžμ™€ '{', '}', ',' 둜만 이루어져 μžˆμŠ΅λ‹ˆλ‹€.
  • μˆ«μžκ°€ 0으둜 μ‹œμž‘ν•˜λŠ” κ²½μš°λŠ” μ—†μŠ΅λ‹ˆλ‹€.
  • sλŠ” 항상 μ€‘λ³΅λ˜λŠ” μ›μ†Œκ°€ μ—†λŠ” νŠœν”Œμ„ μ˜¬λ°”λ₯΄κ²Œ ν‘œν˜„ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
  • sκ°€ ν‘œν˜„ν•˜λŠ” νŠœν”Œμ˜ μ›μ†ŒλŠ” 1 이상 100,000 μ΄ν•˜μΈ μžμ—°μˆ˜μž…λ‹ˆλ‹€.
  • return ν•˜λŠ” λ°°μ—΄μ˜ 길이가 1 이상 500 μ΄ν•˜μΈ 경우만 μž…λ ₯으둜 μ£Όμ–΄μ§‘λ‹ˆλ‹€.

[μž…μΆœλ ₯ 예]

s
result
"{{2},{2,1},{2,1,3},{2,1,3,4}}"
[2, 1, 3, 4]
"{{1,2,3},{2,1},{1,2,4,3},{2}}"
[2, 1, 3, 4]
"{{20,111},{111}}"
[111, 20]
"{{123}}"
[123]
"{{4,2,3},{3},{2,3,4,1},{2,3}}"
[3, 2, 4, 1]

μž…μΆœλ ₯ μ˜ˆμ— λŒ€ν•œ μ„€λͺ…

μž…μΆœλ ₯ 예 #1

문제 μ˜ˆμ‹œμ™€ κ°™μŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #2

문제 μ˜ˆμ‹œμ™€ κ°™μŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #3

(111, 20)을 집합 기호λ₯Ό μ΄μš©ν•΄ ν‘œν˜„ν•˜λ©΄ {{111}, {111,20}}이 되며, μ΄λŠ” {{20,111},{111}}κ³Ό κ°™μŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #4

(123)을 집합 기호λ₯Ό μ΄μš©ν•΄ ν‘œν˜„ν•˜λ©΄ {{123}} μž…λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #5

(3, 2, 4, 1)을 집합 기호λ₯Ό μ΄μš©ν•΄ ν‘œν˜„ν•˜λ©΄ {{3},{3,2},{3,2,4},{3,2,4,1}}이 되며, μ΄λŠ” {{4,2,3},{3},{2,3,4,1},{2,3}}κ³Ό κ°™μŠ΅λ‹ˆλ‹€.

solution.java

import java.util.*; class Solution { public ArrayList<Integer> solution(String s) { ArrayList<Integer> answer = new ArrayList<>(); s = s.substring(2, s.length() - 2); String[] sets = s.split("\\},\\{"); Arrays.sort(sets, Comparator.comparingInt(String::length)); for (String set : sets) { String[] elements = set.split(","); for (String element : elements) { int num = Integer.parseInt(element); if (!answer.contains(num)) answer.add(num); } } return answer; } }
 

핡심 ν‚€μ›Œλ“œ

  • λ¬Έμžμ—΄μ—μ„œ {{, }}λ₯Ό μ œκ±°ν•œ ν›„, },{λ₯Ό κ΅¬λΆ„μžλ‘œ λ¬Έμžμ—΄μ„ λΆ„ν• ν•œλ‹€.
    • substring()κ³Ό split() 을 톡해 λ¬Έμžμ—΄μ„ μ œκ±°ν•˜κ³  λΆ„ν• ν•  수 μžˆλ‹€.
  • λΆ„ν• ν•œ λ¬Έμžμ—΄μ„ 길이λ₯Ό κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•œλ‹€.
    • Arrays.sort(), Comparator.comparingInt(String::length) λ₯Ό 톡해 쑰건이 뢙은 정렬을 μˆ˜ν–‰ν•œλ‹€.
  • 각각의 λ¬Έμžμ—΄μ„ ,λ₯Ό κ΅¬λΆ„μžλ‘œ λΆ„ν• ν•΄μ„œ μ •μˆ˜λ₯Ό κ΅¬ν•œλ‹€.
  • λ§Œμ•½ ν•œ λ²ˆλ„ λ“±μž₯ν•˜μ§€ μ•Šμ€ 수라면 λ¦¬μŠ€νŠΈμ— μΆ”κ°€ν•œλ‹€.
 

κ²°λ‘ !

ν•΄λ‹Ή 문제λ₯Ό ν’€λ©΄μ„œ μ–΄λ–»κ²Œ λ¬Έμžμ—΄μ„ λΆ„ν• ν•΄μ„œ 길이 순으둜 μ •λ ¬ν•  수 μžˆμ„μ§€μ— λŒ€ν•΄ 많이 κ³ λ―Όν–ˆλŠ”λ°, 이λ₯Ό substring()κ³Ό split(), Arrays.sort(), Comparator.comparingInt(String::length) λ₯Ό 톡해 ν•΄κ²°ν•  수 μžˆμ—ˆλ‹€.
 
Share article

More articles

See more posts

[μ½”λ“œλ‘œ λ°°μš°λŠ” μŠ€ν”„λ§ μ›Ή ν”„λ‘œμ νŠΈ κ°œμ •νŒ] 2μž₯ 정리

March 13, 2024
[μ½”λ“œλ‘œ λ°°μš°λŠ” μŠ€ν”„λ§ μ›Ή ν”„λ‘œμ νŠΈ κ°œμ •νŒ] 2μž₯ 정리

πŸ‘¨πŸ»β€πŸ’»DriedPollack's Blog