๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/๋ฐฑ์ค€(BOJ)

[ ํŒŒ์ด์ฌ(python) ] ๋ฐฑ์ค€ 10703 - ์œ ์„ฑ

by YWTechIT 2021. 5. 27.
728x90

๐Ÿ“ ๋ฐฑ์ค€ 10703 - ์œ ์„ฑ

๋ฐฑ์ค€ 10703 - ์œ ์„ฑ


โšก๏ธ ๋‚˜์˜ ํ’€์ด

์ด ๋ฌธ์ œ๋Š” ๋‚ด๊ฐ€ ๊ตฌํ˜„๋ ฅ์ด ๋ถ€์กฑํ•˜์—ฌ 3์ผ ๋™์•ˆ ๋ถ™์žก๊ณ  ์žˆ์—ˆ๋‹ค. ์ง€๊ธˆ ์ •๋‹ต ํŒ์ •์„ ๋ฐ›๊ณ  ๋ณต์Šต ๊ฒธ ๊ธ€์„ ์ž‘์„ฑํ•˜๋ฉด์„œ ๋Š๋ผ๋Š” ๊ฑด ์ •๋‹ต ์ฝ”๋“œ๋ฅผ ๋ณผ ๋• ๊ธˆ๋ฐฉ ํ’€ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ ๋ง‰์ƒ ํ’€ ๋•Œ๋Š” ์™œ ๊ทธ๋ ‡์ง€ ๋ชปํ• ๊นŒ?!๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.

 

์ค‘๊ฐ„์— move๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ณผ์ •์— ๋ง‰ํ˜€ ์งˆ๋ฌธ์„ ์˜ฌ๋ ธ๋Š”๋ฐ ๊ณ ์ˆ˜๋ถ„๊ป˜์„œ ๋ช…์พŒํ•œ ๋‹ต๋ณ€์„ ํ•ด์ฃผ์…”์„œ ๋„ˆ๋ฌด ๊ฐ์‚ฌํ–ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ๋‹ค ํ’€๊ณ  ๊ทธ๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ๊นŒ ์ด๋ ‡๊ฒŒ๋„ ์ƒ๊ฐ ํ•  ์ˆ˜ ์žˆ๊ตฌ๋‚˜..! ๋Œ€๋ฐ•์ธ๋ฐ?!๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๋‚˜๋„ ์–ธ์  ๊ฐ€ ๊ณ ์ˆ˜๊ฐ€ ๋˜์–ด ๋ชจ๋ฅด๋Š” ๋ถ„๋“ค์ด ์˜ฌ๋ฆฌ๋Š” ์งˆ๋ฌธ์„ ์ž์œ ์ž์žฌ๋กœ ๋‹ต๋ณ€ํ•ด์ฃผ๋Š” ์ˆ˜์ค€๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ€๋ฆฌ๋ผ..

 

์ด๋ฒˆ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉฐ ๋ฐฐ์šด์ ์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์žˆ์ง€๋งŒ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋‚ด์šฉ๋“ค๋งŒ ๊ฐ€์ ธ์™”๋‹ค.

  1. ๋ฌธ์ž์—ด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ [list(input())] ๋Œ€์‹  [input()]์„ ์‚ฌ์šฉํ•˜์ž!! ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ถ™์ด์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌธ์ž์—ด ์ž์ฒด์—์„œ๋„ ์ธ๋ฑ์‹ฑ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. `list`๋ฅผ ๋ถ™์ด์ง€ ์•Š์•˜๋”๋‹ˆ ์‹คํ–‰์‹œ๊ฐ„์ด 2๋ฐฐ ๊ฐ€๊นŒ์ด ์ค„์—ˆ๋‹ค.
  2. ๋ฒ”์œ„๊ฐ€ ํฐ 2์ฐจ์› ๋ฌธ์ž์—ด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ print() ๋Œ€์‹  sys.stdout.write()๋ฅผ ์‚ฌ์šฉํ•˜์ž!! print()์™€ sys.stdout.write()๋Š” input()๊ณผ sys.stdin.readline๋งŒํผ ์ฐจ์ด๋Š” ์—†์ง€๋งŒ ๋ฌธ์ž์—ด์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์ถœ๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ์— print()๋Š” ์—„์ฒญ ๋Š๋ฆด ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
  3. ์ตœ๋Œ€๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๋ ค๋Š” ์ดˆ๊ธฐ๊ฐ’์€ 0๋ณด๋‹ค๋Š” ์Œ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ž. ๊ผญ ํ•„์š”ํ•œ๊ฑด ์•„๋‹ˆ์ง€๋งŒ ๊ฐ€๋…์„ฑ๋ฉด์—์„œ ์ฐจ์ด๊ฐ€ ๋‚œ๋‹ค.
  4. 2์ฐจ์› ๋ฐฐ์—ด์„ ํ•˜๋‚˜ํ•˜๋‚˜์”ฉ ๊ฒ€์‚ฌํ•  ๋•Œ ๊ผญ ์ขŒ์ธก ์ƒ๋‹จ์—์„œ๋ถ€ํ„ฐ ํ•˜๋ผ๋Š” ๋ฒ•์€ ์—†๋‹ค. ๋ฐฐ์—ด ๋‚ด์˜ ์›€์ง์ž„์ด ๋งŽ์€ ๋ฌธ์ œ๋ผ๋ฉด ์ขŒ์ธก ํ•˜๋‹จ, ํ˜น์€ ์šฐ์ธก ํ•˜๋‹จ์˜ ๊ฒฝ์šฐ๋„ ๊ณ ๋ คํ•ด๋ณด์ž.

 

 

์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ ์œ ์„ฑ ์ขŒํ‘œ ์ค‘ ๊ฐ€์žฅ ๋†’์€ ํ–‰ ์ขŒํ‘œ(์ขŒํ‘œ๊ฐ€ ์ปค์•ผ ๋•…๊ณผ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€๊น๋‹ค.)์™€ ๋•… ์ขŒํ‘œ ์ค‘ ๊ฐ€์žฅ ๋‚ฎ์€ ํ–‰ ์ขŒํ‘œ(์ขŒํ‘œ๊ฐ€ ์ž‘์•„์•ผ ์œ ์„ฑ๊ณผ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€๊น๋‹ค.)๋ฅผ ์„œ๋กœ ๋นผ์•ผ ๋•…๊ณผ ๋ถ€๋”ชํžˆ์ง€ ์•Š๊ณ  ์œ ์„ฑ์ด ์ถ”๋ฝํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ๋ฐ˜๋ณต๋ฌธ๋งˆ๋‹ค ๋งค ๊ฐ€์žฅ ๋‚ฎ์€ ์ขŒํ‘œ๋กœ ์„ค์ •ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ ์•„๋‹Œ๊ฐ€?๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์œ ์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋„ ์ตœ์†Œ๊ฐ’์œผ๋กœ ์„ค์ •๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ ์„ฑ์ด ์žˆ์œผ๋ฉด์„œ ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ’์„ ๊ณ ๋ คํ•ด์ค˜์•ผํ•œ๋‹ค. arr์„ ๊ฐ€๋กœ๊ฐ€ ์•„๋‹Œ ์„ธ๋กœ๋กœ ํ™•์ธํ•˜๋ฉฐ flag๋ฅผ ์„ค์ •ํ–ˆ๊ณ , ์œ ์„ฑ์ด ์žˆ๋Š” ์ขŒํ‘œ์—์„œ๋งŒ True๋กœ ๋ฐ”๊ฟ” move๋ฅผ ๊ณ„์‚ฐํ•œ ์ด์œ ๊ฐ€ ์ด ๋•Œ๋ฌธ์ด๋‹ค.

 

์ด๋ณด๋‹ค ์‰ฌ์šด ๋ฐฉ์‹์ธ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ S์˜ ๊ธธ์ด๋งŒํผ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ๊ณ  ํ˜„์žฌ ์œ ์„ฑ์˜ ์ขŒํ‘œ ์ผ ๋•Œ ํ˜„์žฌ row๊ฐ’๊ณผ ์ดˆ๊ธฐ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ์ตœ๋Œ€ row๋ฅผ ๊ฐฑ์‹ ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•, ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ˜„์žฌ ๋•…์˜ ์ขŒํ‘œ๊ฐ€ ์ผ ๋•Œ ์ตœ์†Œ row์„ ๊ฐฑ์‹ ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด ์‰ฝ๊ฒŒ ํ’€์—ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ด๋Ÿฐ ์ƒ๊ฐ์„ ํ–ˆ์ง€?! ๋Œ€๋‹จํ•˜๋‹ค..

 

์ดํ›„์—๋Š” ์ตœ์ข… move๋งŒํผ ๋ฐฐ์—ด์„ ์ด๋™์‹œ์ผœ์ฃผ์ž. ์ง€๊ธˆ๊นŒ์ง€์˜ ์„ค๋ช…์ด ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ด๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ•˜๋‹จ์˜ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ํ•ด๋ณด๊ณ  ์™œ ์•ˆ๋˜๋Š”์ง€ ์ƒ๊ฐํ•ด๋ณด์ž. ๊ทธ๋Ÿผ ๊ธˆ๋ฐฉ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

6 8
...X....
........
.......#
.......#
.......#
...#####

result:
........
........
.......#
.......#
...X...#
...#####

๋ฉ”๋ชจ๋ฆฌ์ดˆ๊ณผ์™€ ์‹œ๊ฐ„์ดˆ๊ณผ์˜ ์—ฐ์†์ด์—ˆ๋˜ ๋ฌธ์ œ..

 

# ๋‚˜์˜ ์ฝ”๋“œ
import sys
input = sys.stdin.readline

R, S = map(int, input().split())
meteor = [input() for _ in range(R)]    # ์œ ์„ฑ ์ถฉ๋Œ ์ „
arr = [['.'] * S for _ in range(R)]    # ์œ ์„ฑ ์ถฉ๋Œ ํ›„

move = 1 << 14    # ์œ ์„ฑ์ด ์ตœ์ข…์ ์œผ๋กœ ์›€์ง์—ฌ์•ผํ•˜๋Š” ๊ฑฐ๋ฆฌ

for x in range(S):
    temp_meteor = 0    # ๊ฐ€์žฅ ๋†’์€ ์œ ์„ฑ ํ–‰ ์ขŒํ‘œ (์ขŒํ‘œ๊ฐ€ ๋†’์•„์•ผ ๋•…๊ณผ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€๊น๋‹ค.)
    temp_ground = 9999    # ๊ฐ€์žฅ ๋‚ฎ์€ ๋•… ํ–‰ ์ขŒํ‘œ (์ขŒํ‘œ๊ฐ€ ๋‚ฎ์•„์•ผ ์œ ์„ฑ๊ณผ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€๊น๋‹ค.)
    flag = False    
    for y in range(R):
        if meteor[y][x] == 'X':
            temp_meteor = max(temp_meteor, y)
            flag = True    # ์œ ์„ฑ์ด ์žˆ๋Š” ์ขŒํ‘œ๋ฅผ ๋งŒ๋‚˜๋ฉด True
        elif meteor[y][x] == '#':
            temp_ground = min(temp_ground, y)
    if flag:    # ์œ ์„ฑ์ด ์žˆ๋Š” ์ขŒํ‘œ์—์„œ `move` ๊ณ„์‚ฐ
        move = min(abs(temp_meteor-temp_ground)-1, move)

for x in range(R):
    for y in range(S):
        if meteor[x][y] == 'X':
            arr[x+move][y] = 'X'    # ์œ ์„ฑ์„ ์ตœ์ข… move๋งŒํผ ์›€์ง์ธ๋‹ค.
        if meteor[x][y] == '#':
            arr[x][y] = '#'

for i in range(R):    # ๊ฒฐ๊ณผ ์ถœ๋ ฅ
    for j in range(S):
        sys.stdout.write(arr[i][j])
    sys.stdout.write('\n')

 

 

# ๋‹ค๋ฅธ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ
import sys
input = sys.stdin.readline

R, S = map(int, input().split())
meteor = [input() for _ in range(R)]    
arr = [['.'] * S for _ in range(R)]    

max_meteor = [-3333] * S    # ์œ ์„ฑ ์ขŒํ‘œ๋ฅผ ์ €์žฅ ํ•  ๋ฆฌ์ŠคํŠธ
min_ground = [1 << 14] * S    # ๋•… ์ขŒํ‘œ๋ฅผ ์ €์žฅ ํ•  ๋ฆฌ์ŠคํŠธ

for x in range(R):
    for y in range(S):
        if meteor[x][y] == 'X':
            max_meteor[y] = max(max_meteor[y], x)    # ํ˜„์žฌ ์œ ์„ฑ์˜ y์ขŒํ‘œ(์—ด)๋ฅผ ๊ฐฑ์‹ ํ•จ
        elif meteor[x][y] == '#':
            min_ground[y] = min(min_ground[y], x)    # ํ˜„์žฌ ๋•…์˜ y์ขŒํ‘œ(์—ด)๋ฅผ ๊ฐฑ์‹ ํ•จ

move = min((j-i for i, j in zip(max_meteor, min_ground))) - 1    # ์ตœ์ข…์ ์œผ๋กœ ๊ฐ€์•ผ ํ•  move ๊ณ„์‚ฐ

for x in range(R):
    for y in range(S):
        if meteor[x][y] == 'X':
            arr[x+move][y] = 'X'    # ์œ ์„ฑ์„ ์ตœ์ข… move๋งŒํผ ์›€์ง์ธ๋‹ค.
        if meteor[x][y] == '#':
            arr[x][y] = '#'

for i in range(R):    # ๊ฒฐ๊ณผ ์ถœ๋ ฅ
    for j in range(S):
        sys.stdout.write(arr[i][j])
    sys.stdout.write('\n')
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€