diff --git a/code_study/Baekjoon/ts/30805.ts b/code_study/Baekjoon/ts/30805.ts new file mode 100644 index 0000000..5300e09 --- /dev/null +++ b/code_study/Baekjoon/ts/30805.ts @@ -0,0 +1,45 @@ +export {}; + +type pair = [number, number]; // [value, index] + +const input: string[] = require("fs").readFileSync(0).toString().trim().split('\n'); +const [N, M]: number[] = [Number(input[0]), Number(input[2])]; +let A: number[] = input[1].split(' ').map(Number); +let B: number[] = input[3].split(' ').map(Number); + +const comparator = (a: pair, b: pair) => { + if(a[0] === b[0]) return a[1] - b[1]; + return b[0]-a[0]; +}; + +let pairA: pair[] = A.map((v,i)=>[v,i]); +let pairB: pair[] = B.map((v,i)=>[v,i]); + +pairA.sort(comparator); +pairB.sort(comparator); + +let subsequence: number[] = []; +let limitA = -1, limitB = -1; +let idxA = 0, idxB = 0; + +while(idxA < N && idxB < M) { + const [valA, posA]: number[] = pairA[idxA]; + const [valB, posB]: number[] = pairB[idxB]; + + if(valA===valB) { + if(posA > limitA && posB > limitB) { + subsequence.push(valA); + limitA = posA; + limitB = posB; + idxA++; + idxB++; + } + else if(posA <= limitA) idxA++; + else idxB++; + } + else if(valA > valB) idxA++; + else idxB++; +} + +console.log(subsequence.length); +if (subsequence.length !== 0) console.log(...subsequence);