[Programmers] ๋ฐฉ๋ฌธ ๊ธธ์ด
Updated:
๋ฐฉ๋ฌธ ๊ธธ์ด
๋ฐฉ๋ฌธ ๊ธธ์ด ์ ํด๋ฆญํ๋ฉด ๋ฐ๋ก ์ด๋ํ๋ค.
๊ฒ์ ์บ๋ฆญํฐ๋ฅผ 4๊ฐ์ง ๋ช ๋ น์ด๋ฅผ ํตํด ์์ง์ด๋ ค ํฉ๋๋ค. ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- U: ์์ชฝ์ผ๋ก ํ ์นธ ๊ฐ๊ธฐ
- D: ์๋์ชฝ์ผ๋ก ํ ์นธ ๊ฐ๊ธฐ
- R: ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ๊ฐ๊ธฐ
- L: ์ผ์ชฝ์ผ๋ก ํ ์นธ ๊ฐ๊ธฐ
์บ๋ฆญํฐ๋ ์ขํํ๋ฉด์ (0, 0) ์์น์์ ์์ํฉ๋๋ค. ์ขํํ๋ฉด์ ๊ฒฝ๊ณ๋ ์ผ์ชฝ ์(-5, 5), ์ผ์ชฝ ์๋(-5, -5), ์ค๋ฅธ์ชฝ ์(5, 5), ์ค๋ฅธ์ชฝ ์๋(5, -5)๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ULURRDLLU๋ก ๋ช ๋ นํ๋ค๋ฉด
1๋ฒ ๋ช ๋ น์ด๋ถํฐ 7๋ฒ ๋ช ๋ น์ด๊น์ง ๋ค์๊ณผ ๊ฐ์ด ์์ง์ ๋๋ค.
8๋ฒ ๋ช ๋ น์ด๋ถํฐ 9๋ฒ ๋ช ๋ น์ด๊น์ง ๋ค์๊ณผ ๊ฐ์ด ์์ง์ ๋๋ค.
์ด๋, ์ฐ๋ฆฌ๋ ๊ฒ์ ์บ๋ฆญํฐ๊ฐ ์ง๋๊ฐ ๊ธธ ์ค ์บ๋ฆญํฐ๊ฐ ์ฒ์ ๊ฑธ์ด๋ณธ ๊ธธ์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ค๊ณ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์์ ์์์์ ๊ฒ์ ์บ๋ฆญํฐ๊ฐ ์์ง์ธ ๊ธธ์ด๋ 9์ด์ง๋ง, ์บ๋ฆญํฐ๊ฐ ์ฒ์ ๊ฑธ์ด๋ณธ ๊ธธ์ ๊ธธ์ด๋ 7์ด ๋ฉ๋๋ค.
(8, 9๋ฒ ๋ช ๋ น์ด์์ ์์ง์ธ ๊ธธ์ 2, 3๋ฒ ๋ช ๋ น์ด์์ ์ด๋ฏธ ๊ฑฐ์ณ ๊ฐ ๊ธธ์ ๋๋ค)
๋จ, ์ขํํ๋ฉด์ ๊ฒฝ๊ณ๋ฅผ ๋์ด๊ฐ๋ ๋ช ๋ น์ด๋ ๋ฌด์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, LULLLLLLU๋ก ๋ช ๋ นํ๋ค๋ฉด
- 1๋ฒ ๋ช ๋ น์ด๋ถํฐ 6๋ฒ ๋ช ๋ น์ด๋๋ก ์์ง์ธ ํ, 7, 8๋ฒ ๋ช ๋ น์ด๋ ๋ฌด์ํฉ๋๋ค. ๋ค์ 9๋ฒ ๋ช ๋ น์ด๋๋ก ์์ง์ ๋๋ค.
์ด๋ ์บ๋ฆญํฐ๊ฐ ์ฒ์ ๊ฑธ์ด๋ณธ ๊ธธ์ ๊ธธ์ด๋ 7์ด ๋ฉ๋๋ค.
๋ช ๋ น์ด๊ฐ ๋งค๊ฐ๋ณ์ dirs๋ก ์ฃผ์ด์ง ๋, ๊ฒ์ ์บ๋ฆญํฐ๊ฐ ์ฒ์ ๊ฑธ์ด๋ณธ ๊ธธ์ ๊ธธ์ด๋ฅผ ๊ตฌํ์ฌ return ํ๋ solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
์ฒ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ๋์ฐฉ ์ง์ ์ ์ขํ๊ฐ ์์ ์ ๋ฐฉ๋ฌธ ํ๋ ์ขํ ์ค์ ์๋ค๋ฉด ๊ทธ๋ฌํ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ๋ ๋ฒ์งธ ๋ถํฐ
์ฒ์ ๊ฑธ์ด๋ณธ ๊ธธ์ด ์๋๋ผ๊ณ ํ๋จํ๋ค.. ๋ฌผ๋ก ์์ฃผ์์ฃผ ๋จํธ์ ์ด๊ณ ๋ฉ์ฒญํ ์๊ฐ์ด์๋ค.
์ ๋ฐ ๋ฐฉ๋ฒ์ผ๋ก ์๊ฐํ๊ณ ์ฝ๋ฉ์ ํ๋ ์ฝ๋๋ ๋๋ฌ์์ง๊ณ ์์ธ์ฒ๋ฆฌ๋ ๊ณตํต์ ์ผ๋ก ํ๋๊ฒ ์๋ ๊ทธ๋๊ทธ๋ ์ฒ๋ฆฌํ๋ ๋๋์ด๋ผ์
์น ์ง์ฐ๊ณ ์ฒ์๋ถํฐ ์์ํ๋ค..
์ฌ๋ฌ ๊ฒฝ์ฐ๋ฅผ ๊ทธ๋ ค ์์ผ๋ก ํ ์คํธ ํด๋ณด๋ ๊ท์น์ด ๋ณด์๋ค.
๋ฐ๋ก ์๊ฐ ๋ ์ฌ๋๋ ์๊ฒ ์ง๋ง ๋๋ ์๋์๋ค.. ์ด์จ๋ ๊ท์น์ ์ง๊ธ ์ด๋ ํ ์์์ ์ ์ขํ, ๋์ฐฉ์ ์ ์ขํ๊ฐ
์ด์ ์ ์ด๋ํ ์์์ ์ ์ขํ, ๋์ฐฉ์ ์ ์ขํ์ ๊ฒน์น๋๊ฒ ์๋ค๋ฉด ์ด๋ฏธ ๊ฑธ์ด๋ดค๋ ๊ธธ์ด๋ค!
ย | ์์์ | ๋์ฐฉ์ |
---|---|---|
R | (0, 0) | (1, 0) |
U | (1, 0) | (1, 1) |
D | (1, 1) | (1, 0) |
D | (1, 0) | (1, -1) |
L | (1, -1) | (0, -1) |
U | (0, -1) | (0, 0) |
U | (0, 0) | (0, 1) |
R | (0, 1) | (1, 1) |
D | (1, 1) | (1, 0) |
์์ ํ๋ฅผ ๋ณด๋ฉด ์ธ ๋ฒ์งธ ์ด๋์ธ โDโ ๋ ๋ ๋ฒ์งธ ์ด๋์ธ โUโ ์ ์์์ , ๋์ฐฉ์ ์ด ๋ฐ๋๋ก ๊ฒน์น๋ค.
๊ทธ ๋ง์ ์ฌ๋ผ๊ฐ๋ ๊ธธ์ ๊ทธ๋๋ก ๋ด๋ ค์๋ค๊ณ ํ๋จ ํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง ์ด๋์ธ โDโ ๋ฅผ ๋ณด๋ฉด ๋ ๋ฒ์งธ ์ด๋์ธ โUโ ์ ์์์ , ๋์ฐฉ์ ์ด ๋ฐ๋๋ก ๊ฒน์น๋ค.
์ด ๋ง๋ ๋๊ณ ๋์ ์ฌ๋ผ๊ฐ๋ ๊ธธ์ ๋ค์ ๋ด๋ ค์๋ค๊ณ ํ๋จ ํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ x, y ์ขํ๊ฐ -5 ์ด์ 5 ์ดํ ์ธ ๊ฒฝ์ฐ์๋ง ์ด๋์ด ์ ํจํ๋ค. ๋ฐ๋ผ์ ๋จผ์ ๋์ฐฉ์ ์ขํ๋ฅผ ๊ณ์ฐ ํ๊ณ ์กฐ๊ฑด์ ๋ง๋ ๊ฒฝ์ฐ์๋ง
๊ฐฑ์ ์ ํด์ฃผ์๋ค.
def check(i, start, end):
for j in range(i):
if start[i] == start[j] and end[i] == end[j]:
return False
if start[i] == end[j] and end[i] == start[j]:
return False
else:
return True
def solution(dirs):
x = 0
y = 1
answer = 1
start = [[0 for i in range(2)] for j in range(len(dirs))]
end = [[0 for i in range(2)] for j in range(len(dirs))]
if dirs[0] == 'U':
end[0][y] += 1
elif dirs[0] == 'D':
end[0][y] -= 1
elif dirs[0] == 'R':
end[0][x] += 1
elif dirs[0] == 'L':
end[0][x] -= 1
for i in range(1, len(dirs)):
start[i] = end[i-1]
if dirs[i] == 'U':
end[i][x] = start[i][x]
if -5 <= start[i][y] + 1 <= 5:
end[i][y] = start[i][y] + 1
else:
end[i][y] = start[i][y]
continue
elif dirs[i] == 'D':
end[i][x] = start[i][x]
if -5 <= start[i][y] - 1 <= 5:
end[i][y] = start[i][y] - 1
else:
end[i][y] = start[i][y]
continue
elif dirs[i] == 'R':
end[i][y] = start[i][y]
if -5 <= start[i][x] + 1 <= 5:
end[i][x] = start[i][x] + 1
else:
end[i][x] = start[i][x]
continue
elif dirs[i] == 'L':
end[i][y] = start[i][y]
if -5 <= start[i][x] - 1 <= 5:
end[i][x] = start[i][x] - 1
else:
end[i][x] = start[i][x]
continue
if check(i, start, end):
answer += 1
return answer
dirs = "RUDDLUURD"
print(solution(dirs))
๊ฐ์ธ์ ์ผ๋ก ์ข ๋ํดํ๋ ๋ฌธ์ ์๋๋ฐ ํ๊ณ ๋์ ๋ค๋ฅธ ์ฌ๋ ์ฝ๋๋ฅผ ๋ณผ ์ ์๋ค๋๊ฒ ๊ฐ์ฅ ์ข์ ๋ถ๋ถ ๊ฐ๋ค.
๋๋ ์ด๋ ๊ฒ ํ์๋๋ฐ ๋ค๋ฅธ์ฌ๋๋ค์ ์ด๋ป๊ฒ ํ์๋ ๋ณด๋ฉด์ ๋ฐฐ์๊ฐ๋๊ฒ ์ ๋ง ๋ง๋ค.
Leave a comment