JavaRush /Java Blog /Random-KO /๋ฌธ์ œ ์ˆ˜์ค€ 19 ์ž‘์—… 16 ํ•ด๊ฒฐ ์˜ต์…˜(๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ชจ๋‹ˆํ„ฐ๋ง)
Anton Stezhkin
๋ ˆ๋ฒจ 41

๋ฌธ์ œ ์ˆ˜์ค€ 19 ์ž‘์—… 16 ํ•ด๊ฒฐ ์˜ต์…˜(๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ชจ๋‹ˆํ„ฐ๋ง)

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

๋ฐฐ๊ฒฝ:

๋‚˜๋Š” ์ด ๋ฌธ์ œ๋ฅผ ์•„์ฃผ ์˜ค๋žซ๋™์•ˆ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค . ๊ทธ ์•ˆ์—์„œ ๋‘ ๊ฐ€์ง€ ๋ฒ„์ „์˜ ํŒŒ์ผ์„ ๋น„๊ตํ•˜๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ฐพ์•„์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ์ถ”์ถœํ•˜์—ฌ ๋ฐฐ์—ด์„ ๋น„๊ตํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ์˜ค๋žซ๋™์•ˆ ๋ฐ”๋ณด์ฒ˜๋Ÿผ ํ–‰๋™ํ•˜๊ณ  ์‹ค์ˆ˜๋ฅผ ํ•˜๋‹ค๊ฐ€ ๊ฒฐ๊ตญ์—๋Š” ์ƒ์ž ์•ˆ์˜ ์ข…์ด ์œ„์— ๋ฐฐ์—ด์„ ๊ทธ๋ ธ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ด ์ „์—๋Š” ๋‹ค๋ฅธ ํ•ด๊ฒฐ์ฑ…์„ ์‚ดํŽด๋ดค์Šต๋‹ˆ๋‹ค . ๊ทธ๋Ÿฐ๋ฐ ๋„ˆ๋ฌด ๋ณต์žกํ•ด์„œ ๋งˆ์Šคํ„ฐํ•  ์ˆ˜๊ฐ€ ์—†๋„ค์š” :) ๊ฒŒ๋‹ค๊ฐ€ ๊ธฐ์กด ํŒŒ์ผ์ด ๊ธด ๊ฒฝ์šฐ์™€ ์ƒˆ ํŒŒ์ผ์ด ๊ธด ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด 2๊ฐ€์ง€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์•˜๋‹ค.

๋‚ด ์†”๋ฃจ์…˜์˜ ์š”์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ฐฐ์—ด์ด 2๊ฐœ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณธ๋ฌธ ์ „์ฒด์—์„œ๋Š” ์ด๋ฅผ "์ƒˆ ์–ด๋ ˆ์ด" ๋ฐ "๊ธฐ์กด ์–ด๋ ˆ์ด"๋ผ๊ณ  ๋ถ€๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ๊ฐ์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๊ฒƒ๋“ค. ์ฐธ์กฐ ๋ฐฐ์—ด์€ ๋ชจ๋“  ์‚ญ์ œ๊ฐ€ ํฌํ•จ๋œ ์ด์ „ ํŒŒ์ผ์˜ ๋‚ด์šฉ์— ํ•ด๋‹นํ•˜๋Š” ๋ฐฐ์—ด๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ์ด์ „ ํŒŒ์ผ๊ณผ ์ƒˆ ํŒŒ์ผ์˜ ๋‚ด์šฉ์€ ์‚ฝ์ž…๋œ ์ฐธ์กฐ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ๋ฃจํ”„์—์„œ ๋‘ ๋ฐฐ์—ด(์ด์ „ ํ•ญ๋ชฉ๊ณผ ์ƒˆ ํ•ญ๋ชฉ์˜ ๋‚ด์šฉ)์„ ๋ชจ๋‘ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ค‘ ํ•˜๋‚˜์—์„œ ์‚ฝ์ž…์„ ๊ฐ์ง€ํ•˜๋ฉด ๋น„๊ต๋œ ๋ฐฐ์—ด์˜ ๋™์ผํ•œ ์š”์†Œ๊ฐ€ ๋‹ค์‹œ ๊ทผ์ฒ˜์— ์žˆ๋„๋ก ํ•œ ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

์—ฐ์‚ฐ:

๋ณ€์ˆ˜: i - OLD ํŒŒ์ผ์˜ ๋‚ด์šฉ์ด ํฌํ•จ๋œ ๋ฐฐ์—ด ์…€์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. nI - ์ƒˆ ํŒŒ์ผ์˜ ๋‚ด์šฉ์ด ํฌํ•จ๋œ ๋ฐฐ์—ด ์…€์˜ ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ์ž„์‹œ ๋ณ€์ˆ˜์— ์”๋‹ˆ๋‹ค. oldMismatch - ๋ˆ„์  ๋ฐฐ์—ด์˜ ์š”์†Œ newMismatch - ์ƒˆ ๋ฐฐ์—ด์˜ ์š”์†Œ ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ๋ฐ˜๋ณตํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  1. oldMismatch ๋ฐ newMismatch ๋ณ€์ˆ˜๋Š” ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฐฐ์—ด์˜ ์š”์†Œ๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค. Type.SAME์„ ๋ชฉ๋ก์— ์”๋‹ˆ๋‹ค. ๊ณ„์†ํ•˜์„ธ์š”.

  2. oldMismatch ๋ฐ newMismatch ๋ณ€์ˆ˜๋Š” ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฐฐ์—ด์˜ ์š”์†Œ๋Š” ๋™์ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ „ ๊ฐ’์˜ ๊ฐ’์„ oldMismatch์—, ์ƒˆ ๊ฐ’์˜ ๊ฐ’์„ newMismatch์— ์”๋‹ˆ๋‹ค. ๊ณ„์†ํ•˜์„ธ์š”.

  3. oldMismatch ๋ฐ newMismatch ๋ณ€์ˆ˜๋Š” ๋น„์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฐ์—ด์˜ ํ˜„์žฌ ์š”์†Œ์™€ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

    ๊ฒฐ๋ก ์„ ๋‚ด๋ฆฌ์ž. ๊ฒฐ๊ณผ๋ฅผ ๋ชฉ๋ก(lines ๋ณ€์ˆ˜)์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด ์ค‘ ํ•˜๋‚˜์— ๋Œ€ํ•œ ๋ฃจํ”„ ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

    1. 3.1 oldMismatch๋Š” NEW ๋ฐฐ์—ด์˜ ํ˜„์žฌ ์š”์†Œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํŒŒ์ผ์— ํ•œ ์ค„์ด ์ถ”๊ฐ€๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

      ์ด ๋ฌธ์ž์—ด์˜ ๊ฐ’์€ newMismatch์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์ ์–ด๋ณด์ž.

      lines.add(new LineItem(Type.ADDED, newMismatch));
      lines.add(new LineItem(Type.SAME, oldMismatch));

      ์ƒˆ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ํฌํ•จํ•˜๋Š” ๋ฐฐ์—ด์— ์ถ”๊ฐ€ ์š”์†Œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ด์ „ ๋ฐฐ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ์ƒˆ ๋ฐฐ์—ด์˜ 1 ์š”์†Œ๋ฅผ ์•ž์œผ๋กœ ์ด๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      ๋”ฐ๋ผ์„œ OLD ๋ฐฐ์—ด์€ 1 ๋ฃจํ”„ ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

      ๋‚˜--;

    2. 3.2 newMismatch๋Š” OLD ๋ฐฐ์—ด์˜ ํ˜„์žฌ ์š”์†Œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํŒŒ์ผ์—์„œ ํ•œ ์ค„์ด ์ œ๊ฑฐ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ ์–ด ๋ด…์‹œ๋‹ค.

      lines.add(new LineItem(Type.REMOVED, oldMismatch));
       lines.add(new LineItem(Type.SAME, newMismatch));

      OLD ๋ฐฐ์—ด์— ์ถ”๊ฐ€ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” NEW ์–ด๋ ˆ์ด๊ฐ€ 1 ๋ฃจํ”„ ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ด๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

      ๋‚˜--;

  4. ๋ฐฐ์—ด์˜ ๋์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค. ์ด์ œ ์šฐ๋ฆฌ๋Š” ์ด์ „ ๋ฐฐ์—ด์˜ ๋์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ฐ€๋Šฅํ•œ ์ƒํ™ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค

    1. 4.1 - ArrayIndexOutOfBoundsException - ์ƒˆ ๋ฐฐ์—ด์ด ์ด์ „ ๋ฐฐ์—ด๋ณด๋‹ค ์งง์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์˜ ๋งˆ์ง€๋ง‰ ์ค„์ด ์‚ญ์ œ๋˜์—ˆ์Œ์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

    2. 4.2 - ์ƒˆ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋Š” ์šฐ๋ฆฌ์˜ ๊ด€์‹ฌ ๋Œ€์ƒ์ด ์•„๋‹Œ ์ฑ„๋กœ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋œ ๊ฒƒ์œผ๋กœ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

    3. 4.3 - oldMismatch ๋ฐ newMismatch ๋ณ€์ˆ˜๊ฐ€ ๋น„์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ์„ ์ ์Šต๋‹ˆ๋‹ค:

      lines.add(new LineItem(Type.ADDED, newMismatch));
      lines.add(new LineItem(Type.SAME, oldMismatch));
์ถ”์‹  - ๋ณ€์ˆ˜๋ฅผ ์žฌ์„ค์ •ํ•˜๊ณ  nI ๋ณ€์ˆ˜๋ฅผ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION