์๋ ํ์ธ์
๊ณต๋ถํ๋ ์ ์ด์ ๋๋ค.
์ด์ ๋ถํด, ํ์ด์ฌ๊ณผ C++๋ฅผ ํ์ฉํ์ฌ, ์ฝ๋ฉํ๋ ๋ด์ฉ์ ๋ํ ํผ๋๋ฐฑ์ ํ๊ณ ์ํฉ๋๋ค.
ํ์ด์ฌ๋ง ํ๋ค๋ณด๋, C++์ ๋ํ ๊ฐ๋ ๋ ์ฑ๊ฒจ๊ฐ๊ณ ๋ถ์กฑํ ์ง์์ ์ฑ์ฐ๊ธฐ ์ํด์ ํ๋ฒ ์๋ํด๋ณด๋ ค ํ๋๋ฐ, ๊ทธ๋ผ ์์ํ๊ฒ ์ต๋๋ค
๋ชฉ์ฐจ
- 1. ๋ฌธ์ ์ค๋ช
- 2. ์ ํ์ฌํญ
- 3. ํ์ด์ฌ ํ์ด
- 4. ํ์ด์ฌ ํ์ด ์ค๋ช
- 5. ์ํ์ฐฉ์ค
- 6. ๋๋์
1. ๋ฌธ์ ์ค๋ช
์ค๋งํธํฐ์ ์ ํ ํคํจ๋์์, ํคํจ๋๋ฅผ ๋๋ฅด๋ ์ํฉ์ ๋๋ค.
์ผ์, ์ค๋ฅธ์์ ์ด์ฉํด ์ซ์๋ฅผ ๋๋ฅด๋๋ฐ, ๊ฐ์ฅ ๊ฐ๊น์ด ์์น์ ์๋ ์์ผ๋ก ๋ฒํผ์ ํด๋ฆญํด์ผ ํฉ๋๋ค.
๋ฌธ์ ์์๋ ๋ฆฌ์คํธ ํํ๋ก ์ซ์๋ค์ด ์ฃผ์ด์ง๊ณ , ๋ต์ ์ด๋ค ์์ ์ฌ์ฉํ๋์ง์ ๋ฐ๋ผ ์ข์ธก์ด๋ฉด left -> 'L' ์ด ํ๊ธฐ๋์ด์ผ ํ๊ณ , ์ค๋ฅธ์์ด๋ฉด ๋ง์ฐฌ๊ฐ์ง๋ก 'R' ์ด ํ๊ธฐ๋์ด์ผ ํ๋ฉฐ, ๋ฌธ์์ด String format ์ผ๋ก ๋ฐํํ ๊ฐ์ด ์ถ๋ ฅ๋์ด์ผ ํฉ๋๋ค.
์กฐ์ฌํด์ผํ ๊ฒ์ ์ข์ธก ๋ฒํธ์ธ 1,4,7๊ณผ ์ฐ์ธก ๋ฒํธ์ธ 3,6,9 ์ ๊ฒฝ์ฐ ์ฝ๊ฒ ์กฐ๊ฑด๋ฌธ์ ์์ฑํ ์ ์์ง๋ง, center position ์ ์๋ number ๊ฐ์ ๊ฒฝ์ฐ์๋, ์ค๋ฅธ์์ก์ด ํน์ ์ผ์์ก์ด์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๊ฐ์ด ๋ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค.
์ฆ, ๋๋ฌ์ผ ํ ํคํจ๋ ์ซ์์ ์์น๊ฐ ์ข์ธก์์, ๊ทธ๋ฆฌ๊ณ ์ฐ์ธก์์ ๊ฑฐ๋ฆฌ๋ ์ผ๋ง๋ ๋๊ณ , ๊ฐ์ฅ ์ ์ ๊ฐ์ ๊ฐ์ง ๊ฒ์ด, ์ต๋จ ๊ฑฐ๋ฆฌ์ด๋ฏ๋ก, ์ข์ธก๊ณผ ์ฐ์ธก ์ค ํ์์ด ๊ฒฐ์ ๋ฉ๋๋ค.
ํ์ง๋ง, ์ฌ๊ธฐ์ ์ด๋ถ๋ฒ์ ์ผ๋ก ์๊ฐํ๋ฉด ์๋ ์ํฉ์ด ์กด์ฌํฉ๋๋ค
์๋ฅผ ๋ค๋ฉด ์ฝ์ต๋๋ค.
8๋ฅผ ๋๋ฌ์ผ ํ๋ ์ํฉ์ด ์๋๋ฐ, ์ด์ ์ ๋๋ ๋ ์ซ์๊ฐ ์๋ ๊ฒฝ์ฐ์ ๋๋ค.
์ฒ์ ์ถ๋ฐ ์์น๋ ์ผ์ ์ก์ด์ ๊ฒฝ์ฐ * ์ด๋ฉฐ, ์ค๋ฅธ์ ์ก์ด์ ๊ฒฝ์ฐ # ์ ๋๋ค.
์ด๋ค ์์ก์ด์๋ ๊ฐ์, ๊ฑฐ๋ฆฌ๋ ๋ชจ๋ ์ถ๋ฐ ์ง์ ์ ๊ธฐ์ค์ผ๋ก ๊ฐ์ ๊ฑฐ๋ฆฌ์ ์์นํฉ๋๋ค.
์ด๋, ์ด๋ค ์์ก์ด์ธ์ง์ ๋ฐ๋ผ์, ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ ๊ฒฝ์ฐ, ํด๋น ์์ผ๋ก ํด๋ฆญํ๋ ์กฐ๊ฑด์ ์ถ๊ฐํด์ผํฉ๋๋ค.
์ด๋ ๊ฒ ์ฌ๊ณ ํ๋ ๋ด์ฉ์ ์ด์ ์ฝ๋๋ฅผ ํตํด ๊ตฌํํ๋ฉด ๋ฉ๋๋ค.
2. ์ ํ์ฌํญ
- numbers ๋ฐฐ์ด์ ํฌ๊ธฐ๋ 1 ์ด์ 1,000 ์ดํ์ ๋๋ค.
- numbers ๋ฐฐ์ด ์์์ ๊ฐ์ 0 ์ด์ 9 ์ดํ์ธ ์ ์์ ๋๋ค.
- hand๋ "left" ๋๋ "right" ์
๋๋ค.
- "left"๋ ์ผ์์ก์ด, "right"๋ ์ค๋ฅธ์์ก์ด๋ฅผ ์๋ฏธํฉ๋๋ค.
- ์ผ์ ์์ง์๊ฐ๋ฝ์ ์ฌ์ฉํ ๊ฒฝ์ฐ๋ L, ์ค๋ฅธ์ ์์ง์๊ฐ๋ฝ์ ์ฌ์ฉํ ๊ฒฝ์ฐ๋ R์ ์์๋๋ก ์ด์ด๋ถ์ฌ ๋ฌธ์์ด ํํ๋ก
- return ํด์ฃผ์ธ์.
์ ์ถ๋ ฅ ์)
์ | which hands preferred | result |
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] | "right" | "LRLLLRLLRRL" |
[7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] | "left" | "LRLLRRLLLRR" |
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0] | "right" | "LLRLLRLLRL" |
3. ํ์ด์ฌ ํ์ด
vscode ๋ก ํ ์คํธํ ํ์ด
ํ๋ก๊ทธ๋๋จธ์ค ํ์ด
2๊ฐ์ง ์ฝ๋๋ฅผ ๋ณด์ฌ๋๋ฆฌ๋ฉด,
1)vscode
test1, hand1 = [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5], 'right' # ์ง์ ๋ฌธ์ ์ ๋๊ฐ์ ์ํฉ์์ ์ ํํ ์์ธก ์ฌ๋ถ ์ฒดํฌ
test2, hand2 = [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2], 'left'
test3, hand3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], 'right'
# ๋ฐฉ๋ฒ1
# ๋ฒกํฐ์ ์ฌ์ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ๊ธฐ
# ์ฌ์ , ์ ์ญ๋ณ์
num_key = {
1 : [0,0], 2 : [1,0], 3 : [2,0],
4 : [0,1], 5 : [1,1], 6 : [2,1],
7 : [0,2], 8 : [1,2], 9 : [2,2],
0 : [1,3]
}
# ๋จ์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ ํจ์
def finding_dist(number, position):
prev_x, prev_y = num_key.get(number)[0], num_key.get(number)[1] # ์ด์ ํคํจ๋ ์ซ์์ x,y
curr_x, curr_y = position[0], position[1] # ํ์ฌ ํคํจ๋ ์ซ์์ x,y
dist = abs(prev_x - curr_x) + abs(prev_y - curr_y)
return dist
def dist_num(test, hand):
numbers = test # ํ
์คํธํ ๊ฒ๋ค์ 'numbers' ๋ฆฌ์คํธ์ ๋ฃ๋๋ค
answer = '' # ๊ฒฐ๊ณผ๊ฐ
left_num = [1, 4, 7]
right_num = [3, 6, 9]
left_pos = [0, 3]
right_pos = [2, 3]
for number in numbers:
if number in left_num: # ์ข์ธกํค์ ํฌํจ๋ ๊ฒฝ์ฐ
answer += 'L' # ๋ฌธ์์ด์ L์ ์ถ๊ฐํ๊ณ
left_pos = num_key.get(number) # ๋ฆฌ์คํธ ํํ๋ก ๋ฐํ
elif number in right_num: # ์ฐ์ธกํค์ ํฌํจ๋ ๊ฒฝ์ฐ
answer += 'R'
right_pos = num_key.get(number)
else: # ์์ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด, ๋ฒกํฐ ๊ณ์ฐ or ๊ทธ ์ ์ ๊ฐ ๊ณ์ฐ
# ---- ํ์ฌ ๊ฑฐ๋ฆฌ ๊ฐฑ์ ํด์ฃผ๊ธฐ ---- * (์ด์ ์ ์ข, ์ฐ ์์น ๊ฐ์ ๊ธฐ์ตํ๊ณ ์์)
# ์ข์ธก ๊ฑฐ๋ฆฌ ๊ณ์ฐ
left_dist = finding_dist(number, left_pos)
# ์ฐ์ธก ๊ฑฐ๋ฆฌ ๊ณ์ฐ
right_dist = finding_dist(number, right_pos)
if left_dist < right_dist: # ์ข์ธก์ด ๋ ๊ฐ๊น์ด ๊ฒฝ์ฐ
answer += 'L'
left_pos = num_key.get(number)
elif left_dist > right_dist:
answer += 'R'
right_pos = num_key.get(number)
else: # ๊ฐ์ ๊ฒฝ์ฐ์ด๋ฏ๋ก
if hand == 'left':
answer += 'L'
left_pos = num_key.get(number)
else:
answer += 'R'
right_pos = num_key.get(number)
return answer
# ์คํ
result1 = dist_num(test1,hand1)
result2 = dist_num(test2,hand2)
result3 = dist_num(test3,hand3)
print(result1)
print(result2)
print(result3)
2)ํ๋ก๊ทธ๋๋จธ์ค
# 1) ์ฌ์ (์ ์ญ๋ณ์)
num_key = {
1 : [0,0], 2 : [1,0], 3 : [2,0],
4 : [0,1], 5 : [1,1], 6 : [2,1],
7 : [0,2], 8 : [1,2], 9 : [2,2],
0 : [1,3]
}
# 2) ๋จ์ ๊ฑฐ๋ฆฌ ๊ณ์ฐํจ์
def finding_dist(number, position):
prev_x, prev_y = num_key.get(number)[0], num_key.get(number)[1] # ์ด์ ํคํจ๋ ์ซ์์ x,y
curr_x, curr_y = position[0], position[1] # ํ์ฌ ํคํจ๋ ์ซ์์ x,y
dist = abs(prev_x - curr_x) + abs(prev_y - curr_y)
return dist
def solution(numbers, hand):
answer = '' # ๊ฒฐ๊ณผ๊ฐ
left_num = [1, 4, 7]
right_num = [3, 6, 9]
left_pos = [0, 3]
right_pos = [2, 3]
for number in numbers:
if number in left_num: # ์ข์ธกํค์ ํฌํจ๋ ๊ฒฝ์ฐ
answer += 'L' # ๋ฌธ์์ด์ L์ ์ถ๊ฐํ๊ณ
left_pos = num_key.get(number) # ๋ฆฌ์คํธ ํํ๋ก ๋ฐํ
elif number in right_num: # ์ฐ์ธกํค์ ํฌํจ๋ ๊ฒฝ์ฐ
answer += 'R'
right_pos = num_key.get(number)
else: # ์์ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด, ๋ฒกํฐ ๊ณ์ฐ or ๊ทธ ์ ์ ๊ฐ ๊ณ์ฐ
# ---- ํ์ฌ ๊ฑฐ๋ฆฌ ๊ฐฑ์ ํด์ฃผ๊ธฐ ---- * (์ด์ ์ ์ข, ์ฐ ์์น ๊ฐ์ ๊ธฐ์ตํ๊ณ ์์)
# ์ข์ธก ๊ฑฐ๋ฆฌ ๊ณ์ฐ
left_dist = finding_dist(number, left_pos)
# ์ฐ์ธก ๊ฑฐ๋ฆฌ ๊ณ์ฐ
right_dist = finding_dist(number, right_pos)
if left_dist < right_dist: # ์ข์ธก์ด ๋ ๊ฐ๊น์ด ๊ฒฝ์ฐ
answer += 'L'
left_pos = num_key.get(number)
elif left_dist > right_dist:
answer += 'R'
right_pos = num_key.get(number)
else: # ๊ฐ์ ๊ฒฝ์ฐ์ด๋ฏ๋ก
if hand == 'left':
answer += 'L'
left_pos = num_key.get(number)
else:
answer += 'R'
right_pos = num_key.get(number)
return answer
๊ฒฐ๊ณผ :
ํ ์คํธ 1 ใ | ํต๊ณผ (0.00ms, 10.3MB) |
ํ ์คํธ 2 ใ | ํต๊ณผ (0.01ms, 10.3MB) |
ํ ์คํธ 3 ใ | ํต๊ณผ (0.00ms, 10.3MB) |
ํ ์คํธ 4 ใ | ํต๊ณผ (0.00ms, 10.3MB) |
ํ ์คํธ 5 ใ | ํต๊ณผ (0.00ms, 10.3MB) |
ํ ์คํธ 6 ใ | ํต๊ณผ (0.01ms, 10.3MB) |
ํ ์คํธ 7 ใ | ํต๊ณผ (0.01ms, 10.3MB) |
ํ ์คํธ 8 ใ | ํต๊ณผ (0.02ms, 10.3MB) |
ํ ์คํธ 9 ใ | ํต๊ณผ (0.01ms, 10.3MB) |
ํ ์คํธ 10 ใ | ํต๊ณผ (0.01ms, 10.3MB) |
ํ ์คํธ 11 ใ | ํต๊ณผ (0.03ms, 10.3MB) |
ํ ์คํธ 12 ใ | ํต๊ณผ (0.04ms, 10.3MB) |
ํ ์คํธ 13 ใ | ํต๊ณผ (0.05ms, 10.3MB) |
ํ ์คํธ 14 ใ | ํต๊ณผ (0.10ms, 10.3MB) |
ํ ์คํธ 15 ใ | ํต๊ณผ (0.26ms, 10.3MB) |
ํ ์คํธ 16 ใ | ํต๊ณผ (0.23ms, 10.3MB) |
ํ ์คํธ 17 ใ | ํต๊ณผ (0.48ms, 10.3MB) |
ํ ์คํธ 18 ใ | ํต๊ณผ (0.43ms, 10.3MB) |
ํ ์คํธ 19 ใ | ํต๊ณผ (0.54ms, 10.4MB) |
ํ ์คํธ 20 ใ | ํต๊ณผ (0.50ms, 10.4MB) |
C++ ์ ์ด์ด์ 2ํธ
'๐๏ธ์ํํธ์จ์ด > ๐ปpython' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1978๋ฒ. ์์ ์ฐพ๊ธฐ (0) | 2022.04.08 |
---|---|
[๋ฐฑ์ค] 1316๋ฒ. ๊ทธ๋ฃน ๋จ์ด ์ฒด์ปค (0) | 2022.04.08 |
[ํ๋ก๊ทธ๋๋จธ์ค/programmers] ์ซ์ ๋ฌธ์์ด๊ณผ ์๋จ์ด (0) | 2021.12.28 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ ๊ท ์์ด๋ ์ถ์ฒ (0) | 2021.12.28 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ก๋์ ์ต๊ณ ์์์ ์ต์ ์์ (0) | 2021.12.28 |