๐Ÿงฉ Algorithm/SWEA

[SWEA] 1229. [S/W ๋ฌธ์ œํ•ด๊ฒฐ ๊ธฐ๋ณธ] 8์ผ์ฐจ - ์•”ํ˜ธ๋ฌธ2 (Python/D3)

devCloud 2024. 10. 30. 21:09
728x90

[๋ฌธ์ œ ๋งํฌ] ๐Ÿ‘‡

 

SW Expert Academy

SW ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ํ•™์Šต ์ปจํ…์ธ ๋ฅผ ํ™•์ธํ•˜์„ธ์š”!

swexpertacademy.com


ํ’€์ด

๋ช…๋ น์–ด ๋ถ„๋ฆฌ ๋ฐ ์ฒ˜๋ฆฌ

  • ๋ช…๋ น์–ด๋Š” ์‚ฝ์ž…(I)๊ณผ ์‚ญ์ œ(D) ๋‘ ๊ฐ€์ง€๊ฐ€ ์ฃผ์–ด์ง€๋ฏ€๋กœ, ์ด๋ฅผ ๊ตฌ๋ถ„ํ•ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ๋ช…๋ น์–ด๋ฅผ split()์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ฑฐ๋‚˜ ํŠน์ • ๊ตฌ๋ถ„์ž๋กœ ๋‚˜๋ˆ , I ๋˜๋Š” D๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.
  • replace() ํ›„ split() ์‚ฌ์šฉํ•˜๊ธฐ

 

์‚ฝ์ž… ๋ฐ ์‚ญ์ œ ์ฒ˜๋ฆฌ

  • ๊ตฌ๋ถ„ํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ for ๋ฌธ์œผ๋กœ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์–ด ๋ช…๋ น์–ด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•œ๋‹ค.
  • ๊ฐœ๋ณ„ ๋ช…๋ น์–ด๋Š” ๋งจ ์•ž์— I ํ˜น์€ D ๊ฐ€ ์žˆ์–ด์„œ ๋ช…๋ น์–ด์˜ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์กฐ๊ฑด์„ ๋ถ„๋ฆฌํ•œ๋‹ค.
  • ์Šฌ๋ผ์ด์‹ฑ์„ ์ด์šฉํ•˜์—ฌ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ ์—ฐ์‚ฐ์„ ํ•œ๋‹ค.

 

์ถœ๋ ฅ

  • ์•”ํ˜ธ๋ฌธ์˜ ์•ž 10๊ฐœ ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

Solution

for test_case in range(1, 11):
    _ = int(input())
    origin = list(map(int, input().split()))
    _ = int(input())
    commands = input().replace("I", ";I").replace("D", ";D")  # I์™€ D๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„
    # ";"๋กœ ๋‚˜๋ˆ  ๋ช…๋ น์–ด ๋ถ„๋ฆฌ
    commands = commands.split(";")[1:]  # ์ฒซ ๋ถ€๋ถ„์€ ๋นˆ ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ ์ œ์™ธ

    for i in commands:
        command = list(map(str, i.split()))  # ๋ช…๋ น์–ด ๋”ฐ๋กœ ์ €์žฅ

        if command[0] == "I":  # insert ์—ฐ์‚ฐ
            int_command = list(map(int, command[1:]))
            insert_position = int_command[0]  # ์‚ฝ์ž…ํ•  ์œ„์น˜
            insert_command = int_command[2:]  # ๋ช…๋ น์–ด ์ €์žฅ
            origin[insert_position:insert_position] = insert_command
        else:  #delete ์—ฐ์‚ฐ
            int_command = list(map(int, command[1:]))
            del origin[int_command[0]:int_command[0] + int_command[1]] 

    print(f"#{test_case} {' '.join(map(str, origin[:10]))}")

 

๊ฐœ์„ ํ•  ๋ถ€๋ถ„

  • ๋ถˆํ•„์š”ํ•œ ๋ณ€ํ™˜ ์ค„์ด๊ธฐ
    • command = list(map(str, i.split())) ๋Œ€์‹  i.split()๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ•˜๋‹ค. ๋˜ํ•œ int_command๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ๋„ ํ•„์š”ํ•  ๊ฒฝ์šฐ์—๋งŒ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ๋œ๋‹ค.
  • ๋ฆฌ์ŠคํŠธ ์Šฌ๋ผ์ด์‹ฑ์„ ํ™œ์šฉํ•œ ์‚ฝ์ž…
    • origin[insert_position:insert_position] = insert_command๋Š” ํšจ์œจ์ ์ด์ง€๋งŒ, ๋Œ€๋Ÿ‰ ์‚ฝ์ž…์„ ํ•  ๋•Œ origin.insert()๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • del๋กœ ์‚ญ์ œ ์ตœ์ ํ™”
    • ์‚ญ์ œ ๋ถ€๋ถ„์€ origin.pop()์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์š”์†Œ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ๋” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์—ฌ๊ธฐ์„œ๋Š” ์Šฌ๋ผ์ด์‹ฑ์ด ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค.

 

์ตœ์ ํ™”๋œ ์ฝ”๋“œ

for test_case in range(1, 11):
    _ = int(input())  # ์›๋ณธ ์•”ํ˜ธ๋ฌธ ๊ธธ์ด
    origin = list(map(int, input().split()))  # ์›๋ณธ ์•”ํ˜ธ๋ฌธ
    _ = int(input())  # ๋ช…๋ น์–ด ๊ฐœ์ˆ˜
    commands = input().replace("I", ";I").replace("D", ";D")  # I์™€ D๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋ช…๋ น์–ด ๋ถ„๋ฆฌ
    commands = commands.split(";")[1:]  # ๋นˆ ์ฒซ ๋ถ€๋ถ„ ์ œ์™ธ

    for i in commands:
        command = i.split()  # ๋ช…๋ น์–ด ๋ถ„๋ฆฌ
        cmd_type, x, y = command[0], int(command[1]), int(command[2])

        if cmd_type == "I":  # insert ์—ฐ์‚ฐ
            s = map(int, command[3:])  # ์‚ฝ์ž…ํ•  ์ˆซ์ž๋“ค
            origin[x:x] = s  # ๋ฆฌ์ŠคํŠธ ์Šฌ๋ผ์ด์‹ฑ์œผ๋กœ ํ•œ๋ฒˆ์— ์‚ฝ์ž…
        elif cmd_type == "D":  # delete ์—ฐ์‚ฐ
            del origin[x:x + y]  # ๋ฆฌ์ŠคํŠธ ์Šฌ๋ผ์ด์‹ฑ์œผ๋กœ ์‚ญ์ œ

    print(f"#{test_case} {' '.join(map(str, origin[:10]))}")

 

 

๐Ÿ‘ฉ‍๐Ÿ’ป ํšŒ๊ณ 

import re ์‚ฌ์šฉํ•œ ํ’€์ด

import re

for test_case in range(1, 11):
    _ = int(input())
    origin = list(map(int, input().split()))
    _ = int(input())
    commands = input()
    commands = re.split('[I|D]', commands)  # ์—ฌ๋Ÿฌ ๊ตฌ๋ถ„์ž ์‚ฌ์šฉ, I์™€ D๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

    for i in commands[1:]:  # ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋Š” ๊ณต๋ฐฑ์ด๊ธฐ ๋•Œ๋ฌธ์— ํŒจ์Šค
        command = list(map(int, i.split()))  # ๋ช…๋ น์–ด ๋”ฐ๋กœ ์ €์žฅ

        # insert ์™€ delete ์ธ๊ฑธ ๊ตฌ๋ถ„ํ•˜๋ ค๋ฉด ๊ธธ์ด๋กœ ํŒ๋‹จ
        if len(command) >= 3:  # ๊ธธ์ด๊ฐ€ 2๋ณด๋‹ค ํฌ๋ฉด insert ์—ฐ์‚ฐ
            insert_position = command[0]  # ์‚ฝ์ž…ํ•  ์œ„์น˜
            insert_command = command[2:]  # ๋ช…๋ น์–ด ์ €์žฅ
            origin[insert_position:insert_position] = insert_command
        else:  # 2 ์ดํ•˜์ด๋ฉด delete ์—ฐ์‚ฐ
            del origin[command[0]:command[0] + command[1]]

    print(f"#{test_case} {' '.join(map(str, origin[:10]))}")

swea ์—์„œ๋Š” import re ๊ฐ€ ์•ˆ ๋œ๋‹ค๋Š” ๊ฑธ ์žŠ๊ณ  ํ’€๋‹ค๊ฐ€ ๋‚ญํŒจ ๋ดค๋‹ค. ์ด์ „์— ์‚ญ์ œ ์ฒ˜๋ฆฌ๊ฐ€ ์—†๋Š” ์•”ํ˜ธ๋ฌธ ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ์™€์„œ ์‚ฝ์ž… ์‚ญ์ œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์€ ์–ด๋ ต์ง€ ์•Š๊ฒŒ ํ–ˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๋Ÿฌ ๊ตฌ๋ถ„์ž๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชฐ๋ผ์„œ ๋‚œ์ด๋„ ๊ธ‰์ƒ์Šน.. ์‹ฌ์ง€์–ด re.split() ๋„ ์•ˆ ๋ผ์„œ ๋ง‰๋ง‰ํ–ˆ์—ˆ๋‹ค. ์•„๋งˆ import re ๋ฅผ ํ—ˆ์šฉํ•ด์คฌ์œผ๋ฉด ๋งž์ง€ ์•Š์•˜์„๊นŒ ์‹ถ๋‹ค.

 

๊ธฐ์–ตํ•ด์•ผ ํ•˜๋Š” ์ 

๋ฌธ์ž์—ด์€ ๊ตณ์ด map๊ณผ list๋กœ ๊ฐ์Œ€ ํ•„์š”๊ฐ€ ์—†๋‹ค.! split() ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋„ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์ด ์•Œ์•„์„œ ๋ฆฌ์ŠคํŠธํ™”๋ฅผ ํ•ด์ค€๋‹ค.


 

728x90