[๋ฐฑ์ค€] 1759 ์•”ํ˜ธ๋งŒ๋“ค๊ธฐ (python ํŒŒ์ด์ฌ)

2023. 3. 30. 11:26ยท๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]

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

 

1759๋ฒˆ: ์•”ํ˜ธ ๋งŒ๋“ค๊ธฐ

์ฒซ์งธ ์ค„์— ๋‘ ์ •์ˆ˜ L, C๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (3 ≤ L ≤ C ≤ 15) ๋‹ค์Œ ์ค„์—๋Š” C๊ฐœ์˜ ๋ฌธ์ž๋“ค์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ž๋“ค์€ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž์ด๋ฉฐ, ์ค‘๋ณต๋˜๋Š” ๊ฒƒ์€ ์—†๋‹ค.

www.acmicpc.net


์ฒ˜์Œ์—๋Š” itertools ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆœ์—ด์„ ๊ตฌํ•˜๊ณ , ๊ฐ ์ˆœ์—ด๋งˆ๋‹ค ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ–ˆ๋Š”๋ฐ ์‹œ๊ฐ„์ดˆ๊ณผ ๋˜์—ˆ๋‹ค.

์ƒ๊ฐํ•ด ๋ณด๋ฉด ์ตœ๋Œ€ ๊ฒฝ์šฐ๊ฐ€ 15P15๊นŒ์ง€ ๋‚˜์˜ค๋ฏ€๋กœ ์ด ๋ฐฉ๋ฒ•์€ ๋‹น์—ฐํžˆ ์•„๋‹ˆ์—ˆ๋‹ค.

 

์•”ํ˜ธ๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹Œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์•”ํ˜ธ๋ฅผ ์กฐ๊ฑด์— ๋งž๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด ํ•ด๊ฒฐํ•˜์˜€๋‹ค.


์•„์ด๋””์–ด

1. ์•”ํ˜ธ ์กฐ๊ฑด

  • ์•”ํ˜ธ์— ์žˆ๋Š” ์•ŒํŒŒ๋ฒณ์„ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ(aescend)๋กœ ๋ฐฐ์—ด๋˜์—ˆ๋‹ค.
  • ์•”ํ˜ธ์—๋Š” ๋ชจ์Œ 1๊ฐœ ์ด์ƒ, ์ž์Œ 2๊ฐœ ์ด์ƒ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

2. ๋ฐฑํŠธ๋ž˜ํ‚น

  • ๋ฐฑํŠธ๋ž˜ํ‚น ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ŒํŒŒ๋ฒณ์ด ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ์•”ํ˜ธ๋ฅผ ์ƒ์„ฑํ•ด ์ค€๋‹ค.
  • ์•”ํ˜ธ๋ฌธ์˜ ๊ธธ์ด๊ฐ€ L์ด ๋˜๋ฉด ์ž์Œ๊ณผ ๋ชจ์Œ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•ด ์ค€๋‹ค.
  • ์กฐ๊ฑด์ด ๋งž์œผ๋ฉด ์•”ํ˜ธ๋ฌธ์„ ์ถœ๋ ฅํ•ด ์ค€๋‹ค.

์ „์ฒด ์ฝ”๋“œ

vowel = ['a', 'e', 'i', 'o', 'u']

L, C = map(int, input().split())
words = input().split()

words.sort() 

def check(arr):
    v_count, c_count = 0, 0 # ๋ชจ์Œ ๊ฐœ์ˆ˜, ์ž์Œ ๊ฐœ์ˆ˜

    for i in arr:
        if i in vowel:
            v_count += 1
        else:
            c_count += 1

    if v_count >= 1 and c_count >= 2:
        return True
    else:
        return False

def backtracking(arr):

    if len(arr) == L:
        if check(arr):
            print("".join(arr))
            return

    for i in range(len(arr), C):
        if arr[-1] < words[i]:
            arr.append(words[i])
            backtracking(arr)
            arr.pop()

for i in range(C - L + 1):
    a = [words[i]]
    backtracking(a)

์ฝ”๋“œ ์„ค๋ช…

vowel = ['a', 'e', 'i', 'o', 'u']

L, C = map(int, input().split())
words = input().split()

words.sort()

๋‚˜์ค‘์— ์•”ํ˜ธ๋ฌธ์˜ ๋ชจ์Œ, ์ž์Œ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•˜๋‚˜ ์„ ์–ธํ•ด ๋‘”๋‹ค.

์ฃผ์–ด์ง„ ์ž…๋ ฅ์„ ๋ฐ›๊ณ , ์ฃผ์–ด์ง„ ๋ฌธ์ž๋“ค์€ ์•ŒํŒŒ๋ฒณ์ˆœ์œผ๋กœ ์ •๋ ฌ(sort())ํ•œ๋‹ค.

 

for i in range(C - L + 1):
    a = [words[i]]
    backtracking(a)

๊ทธ๋ฆฌ๊ณ  ๊ฐ ์•ŒํŒŒ๋ฒณ์„ ์‹œ์ž‘์œผ๋กœ backtrackingํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

์ด๋•Œ ์•”ํ˜ธ๋ฌธ์˜ ๊ธธ์ด(L)๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ์•ŒํŒŒ๋ฒณ์€ ์ œ์™ธํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์˜ˆ์ œ์— ์žˆ๋Š” ์•ŒํŒŒ๋ฒณ์„ ๋ณด๋ฉด a, c, i๊นŒ์ง€ ์•”ํ˜ธ๋ฌธ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ  ๊ทธ ์ดํ›„๋กœ๋Š” ์•”ํ˜ธ๋ฌธ ๊ธธ์ด๋ฅผ ๋งŒ๋“ค์ง€ ๋ชปํ•˜๋‹ˆ๊นŒ ์ œ์™ธํ•œ๋‹ค.

 

def backtracking(arr):

    if len(arr) == L:
        if check(arr):
            print("".join(arr))
            return

    for i in range(len(arr), C):
        if arr[-1] < words[i]:
            arr.append(words[i])
            backtracking(arr)
            arr.pop()

backtrackingํ•จ์ˆ˜๋Š” ์œ„์™€ ๊ฐ™๋‹ค.

๋จผ์ € ํƒˆ์ถœ ์กฐ๊ฑด์œผ๋กœ ์•”ํ˜ธ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ L์ด ๋˜๋ฉด checkํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด ๋ชจ์Œ, ์ž์Œ์„ ํ™•์ธํ•ด ์ค€๋‹ค.

์กฐ๊ฑด์ด ์ฐธ์ด๋ฉด ์•”ํ˜ธ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  return ํ•ด์ค€๋‹ค. join ๋ฉ”์„œ๋“œ๋ฅผ ์จ์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ถœ๋ ฅํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

์•„์ง ๊ธธ์ด๊ฐ€ L์ด ์•„๋‹ˆ๋ฉด ์•ŒํŒŒ๋ฒณ์„ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค. if๋ฌธ์„ ์‚ฌ์šฉํ•ด ์•”ํ˜ธ๋ฌธ์ด ascend ํ•˜๊ฒŒ ์•ŒํŒŒ๋ฒณ์„ ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.

 

def check(arr):
    v_count, c_count = 0, 0 # ๋ชจ์Œ ๊ฐœ์ˆ˜, ์ž์Œ ๊ฐœ์ˆ˜

    for i in arr:
        if i in vowel:
            v_count += 1
        else:
            c_count += 1

    if v_count >= 1 and c_count >= 2:
        return True
    else:
        return False

checkํ•จ์ˆ˜๋Š” ์œ„์™€ ๊ฐ™๋‹ค.

์ž…๋ ฅ๋ฐ›์€ ๋ฆฌ์ŠคํŠธ(arr)๋ฅผ ํ•œ๋ฒˆ ์Šค์บ”ํ•˜์—ฌ ๋ชจ์Œ๊ณผ ์ž์Œ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ณ  ์กฐ๊ฑด์— ๋งž์œผ๋ฉด True,

์กฐ๊ฑด์— ๋งž์ง€ ์•Š์œผ๋ฉด False๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿงฉ Problem Solving > [๋ฐฑ์ค€]' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€] 28017 ๊ฒŒ์ž„์„ ํด๋ฆฌ์–ดํ•˜์ž (python ํŒŒ์ด์ฌ)  (0) 2023.07.01
[๋ฐฑ์ค€] 9205 ๋งฅ์ฃผ ๋งˆ์‹œ๋ฉด์„œ ๊ฑธ์–ด๊ฐ€๊ธฐ (python ํŒŒ์ด์ฌ)  (0) 2023.04.09
[๋ฐฑ์ค€] 11559 puyopuyo (ํŒŒ์ด์ฌ python)  (0) 2023.03.26
[๋ฐฑ์ค€] 2583 ์˜์—ญ ๊ตฌํ•˜๊ธฐ(python ํŒŒ์ด์ฌ)  (0) 2023.03.16
[๋ฐฑ์ค€] 14938 ์„œ๊ฐ•๊ทธ๋ผ์šด๋“œ (python ํŒŒ์ด์ฌ)  (0) 2022.09.10
'๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐฑ์ค€] 28017 ๊ฒŒ์ž„์„ ํด๋ฆฌ์–ดํ•˜์ž (python ํŒŒ์ด์ฌ)
  • [๋ฐฑ์ค€] 9205 ๋งฅ์ฃผ ๋งˆ์‹œ๋ฉด์„œ ๊ฑธ์–ด๊ฐ€๊ธฐ (python ํŒŒ์ด์ฌ)
  • [๋ฐฑ์ค€] 11559 puyopuyo (ํŒŒ์ด์ฌ python)
  • [๋ฐฑ์ค€] 2583 ์˜์—ญ ๊ตฌํ•˜๊ธฐ(python ํŒŒ์ด์ฌ)
์ œ๋ด‰์•„
์ œ๋ด‰์•„
  • ์ œ๋ด‰์•„
    Overthinking
    ์ œ๋ด‰์•„
    fake it till you make it.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (105)
      • ๐Ÿงฉ Problem Solving (83)
        • [๋ฐฑ์ค€] (74)
        • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] (7)
        • [SW Expert Academy] (1)
        • [์•Œ๊ณ ๋ฆฌ์ฆ˜ for PS] (1)
      • ๐Ÿ“ฆ Data Structure (2)
      • ๐Ÿ“œ Language (14)
        • [python] (14)
      • ๐Ÿ–ค Git (1)
      • ๐ŸŒ† ์ผ์ƒ (3)
        • ๐Ÿ’ฌ ๋ฒฝ๋ณด๊ณ  ๋งํ•˜๊ธฐ (3)
      • ๐Ÿ—„๏ธ ๊ธฐํƒ€ (2)
      • ๐Ÿ”ต css (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๋ˆ„์ ํ•ฉ
    SWEA
    ๋ธŒ๋ฃจํŠธํฌ์Šค
    ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ
    ๋ฐฑํŠธ๋ž˜ํ‚น
    DFS
    ํŒฐ๋ฆฐ๋“œ๋กฌ
    ํŒŒ์ด์ฌ
    ์œ„์ƒ์ •๋ ฌ
    ๋‹ค์ต์ŠคํŠธ๋ผ
    ์ •์ฒ˜๊ธฐ
    ํˆฌํฌ์ธํ„ฐ
    slicing
    ํ”Œ๋กœ์ด๋“œ์›Œ์…œ
    ๋ฐฑ์ค€
    DP
    Bruteforce
    ๋ฐ๋ธŒ์ฝ”์Šค
    BFS
    ๊ตฌํ˜„
    imos
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ๋ถ„ํ•  ์ •๋ณต
    ๋ถ€๋ถ„ํ•ฉ
    ์žฌ๊ท€
    ์Šคํƒ
    ๋ƒ…์ƒ‰
    boj
    ๊ทธ๋ฆฌ๋””
    Python
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์ œ๋ด‰์•„
[๋ฐฑ์ค€] 1759 ์•”ํ˜ธ๋งŒ๋“ค๊ธฐ (python ํŒŒ์ด์ฌ)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”