๐Ÿงก๋ฌธ์ œ ์„ค๋ช…

์™„ํ˜ธ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ•œ ํ…Œ์ด๋ธ”์€ ๋ชจ๋‘ ์ •์ˆ˜ ํƒ€์ž…์ธ ์ปฌ๋Ÿผ๋“ค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์€ 2์ฐจ์› ํ–‰๋ ฌ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์—ด์€ ์ปฌ๋Ÿผ์„ ๋‚˜ํƒ€๋‚ด๊ณ , ํ–‰์€ ํŠœํ”Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
์ฒซ ๋ฒˆ์งธ ์ปฌ๋Ÿผ์€ ๊ธฐ๋ณธํ‚ค๋กœ์„œ ๋ชจ๋“  ํŠœํ”Œ์— ๋Œ€ํ•ด ๊ทธ ๊ฐ’์ด ์ค‘๋ณต๋˜์ง€ ์•Š๋„๋ก ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค. ์™„ํ˜ธ๋Š” ์ด ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

ํ•ด์‹œ ํ•จ์ˆ˜๋Š” col, row_begin, row_end์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.
ํ…Œ์ด๋ธ”์˜ ํŠœํ”Œ์„ col๋ฒˆ์งธ ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•˜๋˜, ๋งŒ์•ฝ ๊ทธ ๊ฐ’์ด ๋™์ผํ•˜๋ฉด ๊ธฐ๋ณธํ‚ค์ธ ์ฒซ ๋ฒˆ์งธ ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ์—์„œ S_i๋ฅผ i ๋ฒˆ์งธ ํ–‰์˜ ํŠœํ”Œ์— ๋Œ€ํ•ด ๊ฐ ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ i ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋“ค์˜ ํ•ฉ์œผ๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
row_begin โ‰ค i โ‰ค row_end ์ธ ๋ชจ๋“  S_i๋ฅผ ๋ˆ„์ ํ•˜์—ฌ bitwise XOR ํ•œ ๊ฐ’์„ ํ•ด์‹œ ๊ฐ’์œผ๋กœ์„œ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ data์™€ ํ•ด์‹œ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ž…๋ ฅ col, row_begin, row_end์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ํ…Œ์ด๋ธ”์˜ ํ•ด์‹œ ๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.


๐Ÿ’›์ œํ•œ ์‚ฌํ•ญ

  • 1 โ‰ค data์˜ ๊ธธ์ด โ‰ค 2,500
  • 1 โ‰ค data์˜ ์›์†Œ์˜ ๊ธธ์ด โ‰ค 500
  • 1 โ‰ค data[i][j] โ‰ค 1,000,000
  • data[i][j]๋Š” i + 1 ๋ฒˆ์งธ ํŠœํ”Œ์˜ j + 1 ๋ฒˆ์งธ ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • 1 โ‰ค col โ‰ค data์˜ ์›์†Œ์˜ ๊ธธ์ด
  • 1 โ‰ค row_begin โ‰ค row_end โ‰ค data์˜ ๊ธธ์ด

๐Ÿ’š์ž…์ถœ๋ ฅ ์˜ˆ

datacolrow_beginrow_endresult
[[2,2,6],[1,5,10],[4,2,9],[3,8,3]]2234

๐Ÿ’™์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

  • ์ •ํ•ด์ง„ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ํŠœํ”Œ์„ ์ •๋ ฌํ•˜๋ฉด {4, 2, 9}, {2, 2, 6}, {1, 5, 10}, {3, 8, 3} ์ด ๋ฉ๋‹ˆ๋‹ค.
  • S_2 = (2 mod 2) + (2 mod 2) + (6 mod 2) = 0 ์ž…๋‹ˆ๋‹ค.
  • S_3 = (1 mod 3) + (5 mod 3) + (10 mod 3) = 4 ์ž…๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ํ•ด์‹œ ๊ฐ’์€ S2 XOR S 3 = 4 ์ž…๋‹ˆ๋‹ค.

๐Ÿ’œ๋‚˜์˜ ํ’€์ด

function solution(data, col, row_begin, row_end) {
    // ์ •๋‹ต ๋ณ€์ˆ˜
    let result = 0
    // col๋ฒˆ์งธ ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
    const sortData = data.sort((a,b) => {
        if(a[col-1] > b[col-1]) return 1
        // ๋™์ผํ•˜๋ฉด ์ฒซ ๋ฒˆ์งธ ์ปฌ๋Ÿผ ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
        else if(a[col-1] === b[col-1]) return b[0] - a[0]
        else return -1
    })
    // i ๋ฒˆ์งธ ํ–‰์˜ ํŠœํ”Œ์— ๋Œ€ํ•ด ๊ฐ ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ i ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋“ค์˜ ํ•ฉ์œผ๋กœ ์ •์˜
    for(let i = row_begin ; i <= row_end ; i ++) {
        // ๊ฒฐ๊ด๊ฐ’์„ ์ •๋‹ต ๋ณ€์ˆ˜์— XOR
        result ^= sortData[i-1].map(a => a%i).reduce((acc, cur, idx) => acc+cur, 0)
    }
    return result
}
profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

0๊ฐœ์˜ ๋Œ“๊ธ€