TopCoder Open 2019 ์ฑŒ๋ฆฐ์ง€: ํŒŒ์ด๋ฅผ XNUMX์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ

TopCoder Open 2019 ์ฑŒ๋ฆฐ์ง€: ํŒŒ์ด๋ฅผ XNUMX์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ
๊นจ์–ด โ€œ์šฐ๋ฆฌ์˜ ์Šน๋ฆฌ: TopCoder Open 2019โ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํŠธ๋ž™์˜ ๋ฌธ์ œ๋ฅผ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค. (๊ณ ์ „์ ์ธ ์Šคํฌ์ธ  ํ”„๋กœ๊ทธ๋ž˜๋ฐ. XNUMX์‹œ๊ฐ„ XNUMX๋ถ„ ์•ˆ์— Java, C#, C++ ๋˜๋Š” Python์˜ ์„ธ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

1. XNUMX์ธ์šฉ ํŒŒ์ด

๋ฌธ์ œ ์„ฑ๋ช…

์ œํ•œ ์‹œ๊ฐ„์€ 4์ดˆ์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ์€ ํŒŒ์ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ๋ณด๋ฉด ์ผ€์ดํฌ๋Š” (์™„์ „ํžˆ) ๋ณผ๋กํ•œ ๋‹ค๊ฐํ˜• ๋ชจ์–‘์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. X ๋ฐ Y ์ •์ˆ˜๋กœ ์ •์ ์˜ ์ขŒํ‘œ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์—๊ฒŒ๋Š” ๋‹ค์„ฏ ๋ช…์˜ ์นœ๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ด๋ฅผ ๋™์ผํ•œ ๋ฉด์ ์˜ XNUMX๊ฐœ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค(๋‹จ, ๋ชจ์–‘์ด ๋ฐ˜๋“œ์‹œ ๋™์ผํ•  ํ•„์š”๋Š” ์—†์Œ). ๋ฌผ๋ก  XNUMX์ปท์ด๋ฉด ๋ˆ„๊ตฌ๋‚˜ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ XNUMX์ปท์ด๋ฉด ํ”„๋กœ๋งŒ์ด ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŒŒ์ด๋ฅผ 1๊ฐœ์˜ ๋™์ผํ•œ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„๋Š” ํ•œ ์ ์„ ํ†ตํ•ด ์ง์„ ์œผ๋กœ ์„ธ ๊ฐœ์˜ ์ ˆ๋‹จ์„ ์ฐพ์œผ์‹ญ์‹œ์˜ค. {x, y, d2, d3, d1}๋ฅผ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ (x, y)๋Š” ์„ธ ์ปท ๋ชจ๋‘์˜ ๊ณตํ†ต์ ์ด๊ณ  d2, d3, dXNUMX์€ ์ปท์˜ ๋ฐฉํ–ฅ ๊ฐ๋„(๋ผ๋””์•ˆ)์ž…๋‹ˆ๋‹ค.

์ •์˜ํด๋ž˜์Šค: CakeForSix
๋ฐฉ๋ฒ•:์ปท
๋งค๊ฐœ๋ณ€์ˆ˜: int[], int[] ๋ฐ˜ํ™˜: double[] ๋ฉ”์†Œ๋“œ ์„œ๋ช…: double[] cut(int[] x, int[] y)
(๊ท€ํ•˜์˜ ๋ฐฉ๋ฒ•์ด ๊ณต๊ฐœ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค)

์ฐธ๊ณ  ์‚ฌํ•ญ

  • x์ถ•์˜ ์–‘์˜ ๋ฐฉํ–ฅ์€ 0(๋ผ๋””์•ˆ)์ด๊ณ , y์ถ•์˜ ์–‘์˜ ๋ฐฉํ–ฅ์€ pi/2(๋ผ๋””์•ˆ)์ž…๋‹ˆ๋‹ค.
  • d ๋ฐฉํ–ฅ์˜ ์ ˆ๋‹จ์€ ์ž„์˜์˜ ์ •์ˆ˜ k์— ๋Œ€ํ•œ pi*k+d ๋ฐฉํ–ฅ์˜ ์ ˆ๋‹จ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  • ์ž„์˜์˜ ๋ฐฉํ–ฅ์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฐ˜๋“œ์‹œ [0, pi)์—์„œ ๋‚˜์˜ฌ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ˆ์ด๋”๋Š” ์ผ€์ดํฌ ์—ฌ์„ฏ ์กฐ๊ฐ์˜ ๋ฉด์ ์„ ๋‘ ๋ฐฐ๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๋‘˜ ์‚ฌ์ด์˜ ์ƒ๋Œ€ ๋˜๋Š” ์ ˆ๋Œ€ ์ฐจ์ด๊ฐ€ 10^(-4) ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ ๋‹ต๋ณ€์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๋ณด๋‹ค ์ •ํ™•ํ•˜๊ฒŒ๋Š” X์™€ Y๋ฅผ ์ฑ„์ ์ž๊ฐ€ ๊ณ„์‚ฐํ•œ 10๊ฐœ ์˜์—ญ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์˜์—ญ๊ณผ ๊ฐ€์žฅ ํฐ ์˜์—ญ์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ท€ํ•˜์˜ ๋Œ€๋‹ต์€ Y์ธ ๊ฒฝ์šฐ ์ˆ˜๋ฝ๋ฉ๋‹ˆ๋‹ค.
  • (๋ฌธ์ œ์˜ ์›๋ž˜ ๋ฒ„์ „์€ 1e-7 ๋Œ€์‹  1e-4์˜ ์ •๋ฐ€๋„๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„์นด์ด๋ธŒ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ •๋ฐ€๋„๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“ค ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ํ˜ธ์ถœ ์‚ฌ๋ก€๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ ์ •๋ฐ€๋„ ์ œํ•œ์„ ๋‚ฎ์ท„์Šต๋‹ˆ๋‹ค. 1e-7์˜ ์ด์ƒ์ ์ธ ์„ธ๊ณ„์—์„œ๋Š” ํ•œ๊ณ„๊ฐ€ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ์—ฌ์ „ํžˆ ๋†’์€ ์ •๋ฐ€๋„๊ฐ€ ์š”๊ตฌ๋˜๋ฏ€๋กœ ์ผ๋ฐ˜์ ์ธ ์ˆ˜์น˜ ์ตœ์ ํ™”๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

์ œํ•œ

  • x์—๋Š” 3~50๊ฐœ์˜ ์š”์†Œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • y๋Š” x์™€ ๋™์ผํ•œ ์ˆ˜์˜ ์š”์†Œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • 0์—์„œ 10 ์‚ฌ์ด์˜ ๋ชจ๋“  ์ขŒํ‘œ
  • x์™€ y๋Š” ์‹œ๊ณ„ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ๋ณผ๋กํ•œ ๋‹ค๊ฐํ˜•์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์˜์–ด ์›๋ณธ

๋ฌธ์ œ ์ •์ฑ…

์ œํ•œ ์‹œ๊ฐ„์€ 4์ดˆ์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ์€ ์ผ€์ดํฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ๋ณด๋ฉด ์ผ€์ดํฌ๋Š” (์™„์ „ํžˆ) ๋ณผ๋กํ•œ ๋‹ค๊ฐํ˜•์ž…๋‹ˆ๋‹ค. int[]sx์™€ y์— ์ •์ ์˜ ์ขŒํ‘œ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์—๊ฒŒ๋Š” ๋‹ค์„ฏ ๋ช…์˜ ์นœ๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ผ€์ดํฌ๋ฅผ ๋™์ผํ•œ ๋ฉด์ (๊ทธ๋Ÿฌ๋‚˜ ๋ฐ˜๋“œ์‹œ ๋™์ผํ•œ ๋ชจ์–‘์€ ์•„๋‹˜)์˜ XNUMX๊ฐœ ์กฐ๊ฐ์œผ๋กœ ์ž๋ฅด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋ˆ„๊ตฌ๋‚˜ XNUMX์ปท ์•ˆ์— ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ง„์ •ํ•œ ํ”„๋กœ๋งŒ์ด XNUMX์ปท ๋งŒ์— ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

์ผ€์ดํฌ๋ฅผ 1๊ฐœ์˜ ๋™์ผํ•œ ํฌ๊ธฐ๋กœ ์ž๋ฅด๋Š” ๋™์ผํ•œ ์ ์„ ํ†ต๊ณผํ•˜๋Š” ์„ธ ๊ฐœ์˜ ์ง์„  ์ ˆ๋‹จ์„ ์ฐพ์œผ์‹ญ์‹œ์˜ค. {x, y, d2, d3, d1}๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ (x, y)๋Š” ์„ธ ์ปท์˜ ๊ณตํ†ต์ ์ด๊ณ  d2, d3, dXNUMX์€ ๋ผ๋””์•ˆ ๋‹จ์œ„์˜ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค.

์ •์˜

ํด๋ž˜์Šค: CakeForSix
๋ฐฉ๋ฒ•:์ปท
๋งค๊ฐœ๋ณ€์ˆ˜: int[], int[] ๋ฐ˜ํ™˜: double[] ๋ฉ”์†Œ๋“œ ์„œ๋ช…: double[] cut(int[] x, int[] y)
(๊ท€ํ•˜์˜ ๋ฐฉ๋ฒ•์ด ๊ณต๊ฐœ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค)

๋…ธํŠธ
โ€” x์ถ•์˜ ์–‘์˜ ๋ฐฉํ–ฅ์€ 0(๋ผ๋””์•ˆ)์ด๊ณ , y์ถ•์˜ ์–‘์˜ ๋ฐฉํ–ฅ์€ pi/2(๋ผ๋””์•ˆ)์ž…๋‹ˆ๋‹ค.
โ€” d ๋ฐฉํ–ฅ์˜ ์ ˆ๋‹จ์€ ์ž„์˜์˜ ์ •์ˆ˜ k์— ๋Œ€ํ•ด pi*k+d ๋ฐฉํ–ฅ์˜ ์ ˆ๋‹จ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
โ€” ์–ด๋–ค ๋ฐฉํ–ฅ์ด๋“  ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋“œ์‹œ [0,pi)์—์„œ ์˜ฌ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
โ€” ์ฑ„์ ์ž๋Š” 10๊ฐœ ์ผ€์ดํฌ ์กฐ๊ฐ์˜ ๋ฉด์ ์„ ๋‘ ๋ฐฐ๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๋‘˜ ์‚ฌ์ด์˜ ์ƒ๋Œ€ ๋˜๋Š” ์ ˆ๋Œ€ ์ฐจ์ด๊ฐ€ 4^(-XNUMX) ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ ๋‹ต๋ณ€์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.
โ€” ๋ณด๋‹ค ์ •ํ™•ํ•˜๊ฒŒ๋Š” X์™€ Y๋ฅผ ์ฑ„์ ์ž๊ฐ€ ๊ณ„์‚ฐํ•œ 10๊ฐœ ์˜์—ญ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์˜์—ญ๊ณผ ๊ฐ€์žฅ ํฐ ์˜์—ญ์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ Y < max( X + 4^(-1), X * (10+4^(-XNUMX)) )์ธ ๊ฒฝ์šฐ ๋‹ต๋ณ€์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.
โ€” (๋ฌธ์ œ์˜ ์›๋ž˜ ๋ฒ„์ „์€ 1e-7 ๋Œ€์‹  1e-4 ์ •๋ฐ€๋„๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„์นด์ด๋ธŒ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์—…์„ 1e-7 ์ •๋ฐ€๋„๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฌธ์ œ ์‚ฌ๋ก€๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ฐ€๋„ ์ œํ•œ์ด ๋‚ฎ์•„์กŒ์Šต๋‹ˆ๋‹ค. ์ด์ƒ์ ์ธ ์„ธ๊ณ„์—์„œ๋Š” ์ œ์•ฝ ์กฐ๊ฑด์ด ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  ์—ฌ์ „ํžˆ ๋†’์€ ์ •๋ฐ€๋„๋ฅผ ์š”๊ตฌํ•˜๋ฏ€๋กœ ์ผ๋ฐ˜์ ์ธ ์ˆ˜์น˜ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

์ œ์•ฝ
โ€” x์—๋Š” 3~50๊ฐœ์˜ ์š”์†Œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
โ€” y๋Š” x์™€ ๋™์ผํ•œ ์ˆ˜์˜ ์š”์†Œ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.
โ€” ๋ชจ๋“  ์ขŒํ‘œ๋Š” 0์—์„œ 10,000 ์‚ฌ์ด์ž…๋‹ˆ๋‹ค.
โ€” x์™€ y๋Š” ์‹œ๊ณ„ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ ์ˆœ์„œ๋กœ ๋ณผ๋ก ๋‹ค๊ฐํ˜•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ

0)

{0, 20, 30, 50, 30, 20}
{10, 0, 0, 10, 20, 20}
๋ฐ˜ํ™˜ :
{24.999999999437453, 9.999999999500002, 0.0, 0.7266423406817211, 2.4149503129080787 }

๋Œ€์นญ์ด์ง€๋งŒ ๋ถˆ๊ทœ์น™ํ•œ ์œก๊ฐํ˜•์ž…๋‹ˆ๋‹ค. ์˜ˆ์ œ ๋‹ต๋ณ€์€ ์ˆ˜ํ‰์œผ๋กœ ๋ฐ˜์œผ๋กœ ์ž๋ฅด๊ณ  ๊ฐ ์กฐ๊ฐ์„ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„๋Š” ์ค‘์•™์— ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ์ ˆ๋‹จ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

TopCoder Open 2019 ์ฑŒ๋ฆฐ์ง€: ํŒŒ์ด๋ฅผ XNUMX์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ

1)

{0, 1000, 0}
{0, 0, 1000}
๋ฐ˜ํ™˜ :
{333.3333333331763, 333.3333333332546, 0.7853981633986264, 2.0344439357948154, 2.6779450445891753 }

์ •์‚ผ๊ฐํ˜•. ์ด๋ฒˆ์—๋„ ๋Œ€์นญ์ถ•์„ ๋”ฐ๋ผ ์„ธ ๊ฐœ์˜ ์ ˆ๋‹จ ์ค‘ ํ•˜๋‚˜๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TopCoder Open 2019 ์ฑŒ๋ฆฐ์ง€: ํŒŒ์ด๋ฅผ XNUMX์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ

2)

{40, 70, 90, 90, 50}
{30, 20, 40, 100, 60}
๋ฐ˜ํ™˜ :
{69.79517771922892, 52.77575974637605, 2.0616329654335885, 3.637826104091601, 4.32123485812475 }

๋ถˆ๊ทœ์น™ํ•œ ์˜ค๊ฐํ˜•.

TopCoder Open 2019 ์ฑŒ๋ฆฐ์ง€: ํŒŒ์ด๋ฅผ XNUMX์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ

3)

{300, 400, 300, 200}
{500, 600, 700, 600}
๋ฐ˜ํ™˜: {299.99999999974995, 599.9999999995, 0.0, 1.107148717794088, 2.034443935795705 }

45๋„ ํšŒ์ „ํ•œ ์ •์‚ฌ๊ฐํ˜•์ž…๋‹ˆ๋‹ค.

TopCoder Open 2019 ์ฑŒ๋ฆฐ์ง€: ํŒŒ์ด๋ฅผ XNUMX์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ

[์ถœ์ฒ˜]

๋“ฑ๋ก๋œ ์‚ฌ์šฉ์ž๋งŒ ์„ค๋ฌธ ์กฐ์‚ฌ์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ์ œ๋ฐœ

๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

  • 10๋ถ„ ์ด๋‚ด

  • 10 - 30 ๋ถ„

  • 30 - 60 ๋ถ„

  • 1 - 2 ์‹œ๊ฐ„

  • 2์‹œ๊ฐ„ ๋„˜๊ฒŒ

  • ๋‹ค๋ฅธ

42๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ํˆฌํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. 47๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๊ถŒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€