Algorithm/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์œ„ํด๋ฆฌ ์ฑŒ๋ฆฐ์ง€ 10์ฃผ์ฐจ / ํŒŒ์ด์ฌ / Python

rmsidgkrl 2021. 10. 17. 11:46
728x90
๋ฐ˜์‘ํ˜•

 

๐Ÿ’ก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 )

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - 10์ฃผ์ฐจ

[[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], [4, -

programmers.co.kr


  • ๊ต์ ์— ๋ณ„ ๋งŒ๋“ค๊ธฐ

๋ฌธ์ œ ์„ค๋ช…

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]] ["*"]



๋ฐ˜์‘ํ˜•