[ํ๋ก๊ทธ๋๋จธ์ค] ์ํด๋ฆฌ ์ฑ๋ฆฐ์ง 10์ฃผ์ฐจ / ํ์ด์ฌ / Python
๐กsolutions )
๐ฌ ํด๋น ๋ฌธ์ ๋ ์ขํํ๋ฉด ๋ฐ ์ง์ ์ ๊ต์ ์ ๊ตฌํ๋ ๋ฑ ์ํ์ ์์๊ฐ ์๋ ๋ฌธ์ ๋ผ์ ์ฒ์์๋ ํค๋งฌ ์๋ ์์ผ๋ ๋ฌธ์ ์ ์ฐธ๊ณ ์ฌํญ์์ ์ฃผ์ด์ง ๋ ์ง์ ์ ๊ต์ ์ ๊ตฌํ๋ ๊ณต์์ ์ฌ์ฉํ๋ฉด ์ด๋ ต์ง ์๊ฒ ๊ต์ ์ ์์น๋ฅผ ์ฐพ์ ์ ์๋ค.
๐ฌstart_points์ ๋ณ์ ์ฐ๋ ์์น๋ฅผ ์ ์ฅํ๋๋ฐ ์ด๋ ์ ์๋ก๋ง ํํ๋๋ ์์น์ธ์ง ํ์ธํ๊ธฐ ์ํด is_integer() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
๐ฌ ๋ณ์ด ์ฐํ๋ ์ ๋ค์ x,y์ ์ต๋ ์ต์๊ฐ์ ๊ตฌํ์ฌ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ค. ์ฌ๊ธฐ๊น์ง๋ ์ฝ๊ฒ ๊ตฌํ ์ ์์์ง๋ง ๊ทธ ๋ค์ ์ํ์ ์ขํํ๋ฉด์ ์ปดํจํฐ์ ์ขํํ๋ฉด ํํ๋ก ๋ณํํ๋ ๊ณผ์ ์์ ์กฐ๊ธ ํค๋งธ๋ค.
๐ฌ 4๊ฐ์ ์ฌ๋ถ๋ฉด์ด ์์ญ์ด ์๋ ์ขํํ๋ฉด์ -> 1 ์ฌ๋ถ๋ฉด๋ง ์กด์ฌํ๋๋ก ๋ฐ๊พธ๋ฉฐ ์ด๋ ์ค๋ฅธ์ชฝ ๋งจ์ ์ฒซ ์์์ด (0,0)๋ถํฐ ์์ํ๊ฒ ๋ฐ๊พผ ํ ์ด์ ๋ง๊ฒ ๋ณ๋ค์ ์์น๋ฅผ ์ฐ์ด์ค์ผ ํ๋ค. -> arr[max_y-y][x-min_x] = '*'
๐จ๐ปcode )
from itertools import combinations as combi
def solution(line):
n_list = [i for i in range(len(line))]
start_points = []
x_list, y_list = [], []
# ๋ณ์ ์ฐ๋ ์์น ๊ตฌํ๊ธฐ
for i, j in combi(n_list, 2):
a, b, e = line[i]
c, d, f = line[j]
if (a*d - b*c):
x = (b*f - e*d) / (a*d - b*c)
y = (e*c - a*f) / (a*d - b*c)
if x.is_integer() and y.is_integer():
start_points.append((int(x), int(y)))
x_list.append(int(x))
y_list.append(int(y))
# x, y์ ์ต๋ ์ต์๊ฐ๊ณผ ๋ฐฐ์ด์ ํฌ๊ธฐ ๊ตฌํ๊ธฐ
max_x, min_x = max(x_list), min(x_list)
max_y, min_y = max(y_list), min(y_list)
x_size = max_x - min_x + 1
y_size = max_y - min_y + 1
# ์ํ์ ์ขํํ๋ฉด์ ์์น๋ฅผ(4๋ถ๋ฉด ์์ญ์ด ์๋) -> ์ปดํจํฐ์ ์ขํ์์(1์ฌ๋ถ๋ฉด๋ง ์กด์ฌํ๊ฒ)๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ
arr = [['.'] * x_size for _ in range(y_size)]
for x, y in start_points:
arr[max_y-y][x-min_x] = '*'
return [''.join(s) for s in arr]
๐description )
- ๊ต์ ์ ๋ณ ๋ง๋ค๊ธฐ
๋ฌธ์ ์ค๋ช
Ax + By + C = 0์ผ๋ก ํํํ ์ ์๋ n๊ฐ์ ์ง์ ์ด ์ฃผ์ด์ง ๋, ์ด ์ง์ ์ ๊ต์ ์ค ์ ์ ์ขํ์ ๋ณ์ ๊ทธ๋ฆฌ๋ ค ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ ์ง์ 5๊ฐ๋ฅผ
- 2x - y + 4 = 0
- -2x - y + 4 = 0
- -y + 1 = 0
- 5x - 8y - 12 = 0
- 5x + 8y + 12 = 0
์ขํ ํ๋ฉด ์์ ๊ทธ๋ฆฌ๋ฉด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
์ด๋, ๋ชจ๋ ๊ต์ ์ ์ขํ๋ (4, 1), (4, -4), (-4, -4), (-4, 1), (0, 4), (1.5, 1.0), (2.1, -0.19), (0, -1.5), (-2.1, -0.19), (-1.5, 1.0)์
๋๋ค. ์ด ์ค ์ ์๋ก๋ง ํํ๋๋ ์ขํ๋ (4, 1), (4, -4), (-4, -4), (-4, 1), (0, 4)์
๋๋ค.
๋ง์ฝ ์ ์๋ก ํํ๋๋ ๊ต์ ์ ๋ณ์ ๊ทธ๋ฆฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์ ๊ทธ๋ฆผ์ ๋ฌธ์์ด๋ก ๋ํ๋ผ ๋, ๋ณ์ด ๊ทธ๋ ค์ง ๋ถ๋ถ์ *, ๋น ๊ณต๊ฐ(๊ฒฉ์์ ์ด ๊ต์ฐจํ๋ ์ง์ )์ .์ผ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
"..........." ".....*....." "..........." "..........." ".*.......*." "..........." "..........." "..........." "..........." ".*.......*." "..........."
์ด๋ ๊ฒฉ์ํ์ ๋ฌดํํ ๋์ผ๋ ๋ชจ๋ ๋ณ์ ํฌํจํ๋ ์ต์ํ์ ํฌ๊ธฐ๋ง ๋ํ๋ด๋ฉด ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ ๋ต์
"....*...." "........." "........." "*.......*" "........." "........." "........." "........." "*.......*"
์ ๋๋ค.
์ง์ A, B, C์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ธด ๋ฐฐ์ด line์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์ด๋ ๋ชจ๋ ๋ณ์ ํฌํจํ๋ ์ต์ ์ฌ๊ฐํ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- line์ ์ธ๋ก(ํ) ๊ธธ์ด๋ 2 ์ด์ 1,000 ์ดํ์ธ ์์ฐ์์
๋๋ค.
- line์ ๊ฐ๋ก(์ด) ๊ธธ์ด๋ 3์ ๋๋ค.
- line์ ๊ฐ ์์๋ [A, B, C] ํํ์ ๋๋ค.
- A, B, C๋ -100,000 ์ด์ 100,000 ์ดํ์ธ ์ ์์ ๋๋ค.
- ๋ฌด์ํ ๋ง์ ๊ต์ ์ด ์๊ธฐ๋ ์ง์ ์์ ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- A = 0์ด๋ฉด์ B = 0์ธ ๊ฒฝ์ฐ๋ ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- ์ ๋ต์ 1,000 * 1,000 ํฌ๊ธฐ ์ด๋ด์์ ํํ๋ฉ๋๋ค.
- ๋ณ์ด ํ ๊ฐ ์ด์ ๊ทธ๋ ค์ง๋ ์ ๋ ฅ๋ง ์ฃผ์ด์ง๋๋ค.
์ ์ถ๋ ฅ ์
lineresult
[[2, -1, 4], [-2, -1, 4], [0, -1, 1], [5, -8, -12], [5, 8, 12]] | ["....*....", ".........", ".........", "*.......*", ".........", ".........", ".........", ".........", "*.......*"] |
[[0, 1, -1], [1, 0, -1], [1, 0, 1]] | ["*.*"] |
[[1, -1, 0], [2, -1, 0]] | ["*"] |
[[1, -1, 0], [2, -1, 0], [4, -1, 0]] | ["*"] |