โ๏ธ ๋ฌธ์ ์์ฝ
SW Expert Academy
SW ํ๋ก๊ทธ๋๋ฐ ์ญ๋ ๊ฐํ์ ๋์์ด ๋๋ ๋ค์ํ ํ์ต ์ปจํ ์ธ ๋ฅผ ํ์ธํ์ธ์!
swexpertacademy.com
ํ ์ด๋ธ ์์ ๋ถ์ ์์ฑ์ฒด์ ํธ๋ฅธ ์์ฑ์ฒด๊ฐ ์๋ค. ์๊ธฐ์ฅ์ ๊ฐํ์ ๋ ๋ถ์ ์์ฑ์ฒด๋ S๊ทน์ ์ด๋๋ฆฌ๊ณ , ํธ๋ฅธ ์์ฑ์ฒด๋ N๊ทน์ ์ด๋๋ฆฐ๋ค.
์๊ธฐ์ฅ์ ๊ฐํ์ ๋ ๊ต์ฐฉ ์ํ์ ๊ฐ์๋ฅผ ๊ตฌํ์ฌ๋ผ.
(์์ฑ์ฒด๋ ํ ์ด๋ธ ์๋ค ์ชฝ์ ์๋ N๊ทน ๋๋ S๊ทน์๋ง ๋ฐ์ํ๋ฉฐ ์์ฑ์ฒด๋ผ๋ฆฌ๋ ์ ํ ๋ฐ์ํ์ง ์๋๋ค.)
๐ช ๋ฌด์ํ๊ฒ ํ๊ธฐ
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด ๊ฐ๋จํ ์ ๋ฆฌํ ์กฐ๊ฑด์ ์๋์ ๊ฐ๋ค.
- ํ ์ด๋ธ(=๋ณด๋)์ 90๋ ๋๋ฆฌ๋ฉด, ์์ฑ์ฒด๊ฐ ์/์๋๊ฐ ์๋๋ผ ์ข/์ฐ๋ก ์์ง์ด๊ธฐ ๋๋ฌธ์ ๊ตฌํ์ด ์ฌ์์ง๋ค!
- ๋ถ์ ์์ฑ์ฒด(=1) -> ์ผ์ชฝ์ผ๋ก๋ง ์์ง์ธ๋ค.
- ํธ๋ฅธ ์์ฑ์ฒด(=2) -> ์ค๋ฅธ์ชฝ์ผ๋ก๋ง ์์ง์ธ๋ค.
- ์๊ธฐ์ฅ์ ๊ฐํ์ ๋ "๋จ์ด๋จ๋ฆด ์ ์๋ ๋ชจ๋ ์์ฑ์ฒด๋ค์ ๋จ์ด๋จ๋ฆฐ๋ค"๊ณ ์๊ฐ ํ, ๋จ์ ์์ฑ์ฒด๋ฅผ ๊ฐ์ง๊ณ ๊ต์ฐฉ ์ํ์ ์๋ฅผ ๊ตฌํ์.
- ๊ฐ๊ฐ์ ํ(๊ฐ๋ก)๋ค์ ๋ณ๊ฐ๋ก ์๊ฐํ๋ฉด ๋๋ค.
- ๋ณด๋ ์์์ "0"์ธ ์นธ๋ง ์ด๋ ๊ฐ๋ฅํ๋ค.
์ฐ๋ฆฌ๊ฐ ํด์ผํ๋ ์ผ์ ํฌ๊ฒ ๋ ๊ฐ์ง๊ฐ ์๋ค.
1. ์๊ธฐ์ฅ์ ๊ฐํ ์ํ์ ๋ณด๋๋ฅผ ๊ตฌํ๋ ๊ฒ
2. 1๋ฒ ์ํ์ ๋ณด๋์์ ๊ต์ฐฉ ์ํ์ ์๋ฅผ ๊ตฌํ๋ ๊ฒ
๊ฐ์ธ์ ์ผ๋ก 1๋ฒ๋ณด๋ค 2๋ฒ์ด ๋ ์๊ฐํด์ผํ ๊ฒ ๋ง๋ค๊ณ ๋๊ปด์ 2๋ฒ ์ฝ๋๋ฅผ ๋ฐ๋ก ๋ณผ ๊ฒ์ด๋ค. (1๋ฒ์ ์๋ ์ฝ๋ ์ฃผ์์ ์ฃผ์์ผ๋ก ๋ฌ์๋์๋ค.)
์ฒ์์๋ ์๊ธฐ์ฅ์ ๊ฐํ ํ ๋ถ์ด์๋ ๋ฉ์ด๋ฆฌ(?)๋ฅผ ํ๋์ ๊ต์ฐฉ ์ํ๋ก ์ธ๋ ๊ฒ์ผ๋ก ์ฐฉ๊ฐํ๋ค.
ํ์ง๋ง ๋ฌธ์ ์์๋ฅผ ๋ณด๋ฉด, ์๋ ์ํ๋ฅผ ๊ต์ฐฉ ์ํ๊ฐ 7๊ฐ์ธ ์ํ๋ผ๊ณ ํ๋ค.
๊ฐ ์ด์์ ๋นจ๊ฐ๊ณผ ํ๋ ์ฆ, "12"๊ฐ ๋ถ์ด์์ ๋ ํ๋์ ๊ต์ฐฉ์ํ๋ก ์ธ๋ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๋ ๋ณด๋๋ฅผ ๋๋ ธ๊ธฐ ๋๋ฌธ์, ๊ฐ ํ์์ ํ๋๊ณผ ๋นจ๊ฐ ์ฆ, "21"์ด ๋ถ์ด์์ ๋ ๊ต์ฐฉ์ํ๋ก ์ธ๋ฉด ๋๋ค.
๊ตฌํํ ๋ฐฉ๋ฒ์, ๋ณด๋์ ๊ฐ `row`๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ ๋ค, 0์ ๊ธฐ์ค์ผ๋ก ์ชผ๊ฐ ๋ฌธ์์ด ๋ฆฌ์คํธ๋ก ๋ณํํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฌธ์์ด ๋ฆฌ์คํธ ์ค์์ "21"์ ๊ฐ์๋ฅผ ์นด์ดํธํ์ฌ ๋์ ํ๋ฉด ๋๋ค.
# ๊ต์ฐฉ์ํ ์นด์ดํธ
cnt = 0
for row in board:
S = ''.join(map(str, row))
for x in S.split('0'):
cnt += x.count('21')
์ ์ฒด ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
import sys
sys.stdin = open("input.txt", "r")
sys.stdout = open("output.txt", "w")
# ๋ณด๋ 90๋ ํ์ (size๋ ํ ๋ณ์ ๊ธธ์ด)
def rotate(B, size):
RB = [[0]*size for _ in range(size)]
for i in range(size):
for j in range(size):
RB[j][size-1-i] = B[i][j]
return RB
TC = 10
for test_case in range(1, TC+1):
N = int(input())
board = [list(map(int, input().split())) for _ in range(N)]
board = rotate(board, N) # 90๋ ํ์ # ์ด์ ์ข์ฐ๋ก๋ง ์์ง์ (1->์ผ์ชฝ 2->์ค๋ฅธ์ชฝ)
for i in range(N):
for j in range(N):
if board[i][j] == 0: continue
target = j
if board[i][j] == 1: # ๋นจ๊ฐ -> ์ผ์ชฝ์ผ๋ก๋ง ์ด๋ ๊ฐ๋ฅ
while target-1 >= 0 and board[i][target-1] == 0:
board[i][target] = 0 # ๊ธฐ์กด ์์น๋ 0์ผ๋ก
board[i][target-1] = 1 # ๋นจ๊ฐ์ ์ผ์ชฝ์ผ๋ก ์ด๋
target -= 1
if board[i][0] == 1: # ๋นจ๊ฐ์ด ์ผ์ชฝ ๋์ ์จ๋ค๋ฉด ๋จ์ด์ง๋ค
board[i][0] = 0
elif board[i][j] == 2: # ํ๋ -> ์ค๋ฅธ์ชฝ์ผ๋ก๋ง ์ด๋ ๊ฐ๋ฅ
while target+1 < N and board[i][target+1] == 0:
board[i][target] = 0 # ๊ธฐ์กด ์์น๋ 0์ผ๋ก
board[i][target+1] = 2 # ํ๋์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋
target += 1
if board[i][N-1] == 2: # ํ๋์ด ์ค๋ฅธ์ชฝ ๋์ ์จ๋ค๋ฉด ๋จ์ด์ง๋ค
board[i][N-1] = 0
# ๊ต์ฐฉ์ํ ์นด์ดํธ
cnt = 0
for row in board:
S = ''.join(map(str, row))
for x in S.split('0'):
cnt += x.count('21')
print('#{} {}'.format(test_case, cnt))
โจ ์ฐ์ํ๊ฒ ํ๊ธฐ
์ ํ์ด์์ ๋ถํ์ํ ๊ณผ์ ์ด ๋ง์์ ๊นจ๋ฌ์๋ค..
- `flag`: ๊ต์ฐฉ ์ํ ํ์ธ์ ์ํ ๋ณ์
- N๊ทน์ ๋ง๋๋ฉด `flag`๋ฅผ ํ์ฑํ ์ํค๊ณ , ๊ทธ ์ํ์์ S๊ทน์ ๋ง๋๋ฉด ๊ต์ฐฉ ์ํ
- ์ดํ `flag`๋ฅผ ์ด๊ธฐํ
for tc in range(1, 11):
n = int(input())
mag = [list(map(int, input().split())) for _ in range(n)] # 1: N, 2: S
total_res = 0
for i in range(n):
flag = 0
for j in range(n):
if mag[j][i] == 1:
flag = 1
elif mag[j][i] == 2:
if flag :
total_res += 1
flag = 0
print(f'#{tc} {total_res}')
๐ ์ฐธ๊ณ
'๐ซ ETC > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SWEA] 1206. [S/W ๋ฌธ์ ํด๊ฒฐ ๊ธฐ๋ณธ] 2์ผ์ฐจ - ์ต๋ ์๊ธ (DFS) (0) | 2023.11.16 |
---|---|
[SWEA] 1206. [S/W ๋ฌธ์ ํด๊ฒฐ ๊ธฐ๋ณธ] 1์ผ์ฐจ - View (๊ตฌํ) (0) | 2023.11.15 |
[SWEA] 1928. Base64 Decoder (2) | 2023.11.14 |
[SWEA] 2001. ํ๋ฆฌ ํด์น (DP) (2) | 2023.11.09 |
[๊นํ์ ์๊ณ ๋ฆฌ์ฆ] ์ฌ๊ณผ๋๋ฌด (BFS) (0) | 2023.11.07 |