π λ¬Έμ
λΉμ μ ν νΈμ§ νλ‘κ·Έλ¨μ μμ±νκ³ μμ΅λλ€.
νμ ν¬κΈ°λ 50 × 50μΌλ‘ κ³ μ λμ΄μκ³ μ΄κΈ°μ λͺ¨λ μ
μ λΉμ΄ μμ΅λλ€.
κ° μ
μ λ¬Έμμ΄ κ°μ κ°μ§ μ μκ³ , λ€λ₯Έ μ
κ³Ό λ³ν©λ μ μμ΅λλ€.
μμμ rλ²μ§Έ, μΌμͺ½μμ cλ²μ§Έ μμΉλ₯Ό (r, c)λΌκ³ ννν λ, λΉμ μ λ€μ λͺ
λ Ήμ΄λ€μ λν κΈ°λ₯μ ꡬννλ €κ³ ν©λλ€.
- "UPDATE r c value"
- (r, c) μμΉμ μ μ μ νν©λλ€.
- μ νν μ μ κ°μ valueλ‘ λ°κΏλλ€.
- "UPDATE value1 value2"
- value1μ κ°μΌλ‘ κ°μ§κ³ μλ λͺ¨λ μ μ μ νν©λλ€.
- μ νν μ μ κ°μ value2λ‘ λ°κΏλλ€.
- "MERGE r1 c1 r2 c2"
- (r1, c1) μμΉμ μ κ³Ό (r2, c2) μμΉμ μ μ μ ννμ¬ λ³ν©ν©λλ€.
- μ νν λ μμΉμ μ μ΄ κ°μ μ μΌ κ²½μ° λ¬΄μν©λλ€.
- μ νν λ μ μ μλ‘ μΈμ νμ§ μμ μλ μμ΅λλ€. μ΄ κ²½μ° (r1, c1) μμΉμ μ κ³Ό (r2, c2) μμΉμ μ λ§ μν₯μ λ°μΌλ©°, κ·Έ μ¬μ΄μ μμΉν μ λ€μ μν₯μ λ°μ§ μμ΅λλ€.
- λ μ μ€ ν μ μ΄ κ°μ κ°μ§κ³ μμ κ²½μ° λ³ν©λ μ μ κ·Έ κ°μ κ°μ§κ² λ©λλ€.
- λ μ λͺ¨λ κ°μ κ°μ§κ³ μμ κ²½μ° λ³ν©λ μ μ (r1, c1) μμΉμ μ κ°μ κ°μ§κ² λ©λλ€.
- μ΄ν (r1, c1) μ (r2, c2) μ€ μ΄λ μμΉλ₯Ό μ ννμ¬λ λ³ν©λ μ λ‘ μ κ·Όν©λλ€.
- "UNMERGE r c"
- (r, c) μμΉμ μ μ μ ννμ¬ ν΄λΉ μ μ λͺ¨λ λ³ν©μ ν΄μ ν©λλ€.
- μ νν μ μ΄ ν¬ν¨νκ³ μλ λͺ¨λ μ μ νλ‘κ·Έλ¨ μ€ν μ΄κΈ°μ μνλ‘ λμκ°λλ€.
- λ³ν©μ ν΄μ νκΈ° μ μ μ΄ κ°μ κ°μ§κ³ μμμ κ²½μ° (r, c) μμΉμ μ μ΄ κ·Έ κ°μ κ°μ§κ² λ©λλ€.
- "PRINT r c"
- (r, c) μμΉμ μ μ μ ννμ¬ μ μ κ°μ μΆλ ₯ν©λλ€.
- μ νν μ μ΄ λΉμ΄μμ κ²½μ° "EMPTY"λ₯Ό μΆλ ₯ν©λλ€.
μλλ UPDATE λͺ λ Ήμ΄λ₯Ό μ€ννμ¬ λΉ μ μ κ°μ μ λ ₯νλ μμμ λλ€.
| commands | ν¨κ³Ό |
| UPDATE 1 1 menu | (1,1)μ "menu" μ λ ₯ |
| UPDATE 1 2 category | (1,2)μ "category" μ λ ₯ |
| UPDATE 2 1 bibimbap | (2,1)μ "bibimbap" μ λ ₯ |
| UPDATE 2 2 korean | (2,2)μ "korean" μ λ ₯ |
| UPDATE 2 3 rice | (2,3)μ "rice" μ λ ₯ |
| UPDATE 3 1 ramyeon | (3,1)μ "ramyeon" μ λ ₯ |
| UPDATE 3 2 korean | (3,2)μ "korean" μ λ ₯ |
| UPDATE 3 3 noodle | (3,3)μ "noodle" μ λ ₯ |
| UPDATE 3 4 instant | (3,4)μ "instant" μ λ ₯ |
| UPDATE 4 1 pasta | (4,1)μ "pasta" μ λ ₯ |
| UPDATE 4 2 italian | (4,2)μ "italian" μ λ ₯ |
| UPDATE 4 3 noodle | (4,3)μ "noodle" μ λ ₯ |
μ λͺ λ Ήμ΄λ₯Ό μ€ννλ©΄ μλ κ·Έλ¦Όκ³Ό κ°μ μνκ° λ©λλ€.

μλλ MERGE λͺ λ Ήμ΄λ₯Ό μ€ννμ¬ μ μ λ³ν©νλ μμμ λλ€.
| commands | ν¨κ³Ό |
| MERGE 1 2 1 3 | (1,2)μ (1,3) λ³ν© |
| MERGE 1 3 1 4 | (1,3)κ³Ό (1,4) λ³ν© |
μ λͺ λ Ήμ΄λ₯Ό μ€ννλ©΄ μλμ κ°μ μνκ° λ©λλ€.

λ³ν©ν μ
μ "category" κ°μ κ°μ§κ² λλ©° (1,2), (1,3), (1,4) μ€ μ΄λ μμΉλ₯Ό μ ννλλΌλ μ κ·Όν μ μμ΅λλ€.
μλλ UPDATE λͺ
λ Ήμ΄λ₯Ό μ€ννμ¬ μ
μ κ°μ λ³κ²½νλ μμμ
λλ€.
| commands | ν¨κ³Ό |
| UPDATE korean hansik | "korean"μ "hansik"μΌλ‘ λ³κ²½ |
| UPDATE 1 3 group | (1,3) μμΉμ μ κ°μ "group"μΌλ‘ λ³κ²½ |
μ λͺ λ Ήμ΄λ₯Ό μ€ννλ©΄ μλμ κ°μ μνκ° λ©λλ€.

μλλ UNMERGE λͺ λ Ήμ΄λ₯Ό μ€ννμ¬ μ μ λ³ν©μ ν΄μ νλ μμμ λλ€.
| commands | ν¨κ³Ό |
| UNMERGE 1 4 | μ λ³ν© ν΄μ ν μλ κ°μ (1,4)κ° κ°μ§ |
μ λͺ λ Ήμ΄λ₯Ό μ€ννλ©΄ μλμ κ°μ μνκ° λ©λλ€.

μ€νν λͺ λ Ήμ΄λ€μ΄ λ΄κΈ΄ 1μ°¨μ λ¬Έμμ΄ λ°°μ΄ commandsκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§λλ€. commandsμ λͺ λ Ήμ΄λ€μ μμλλ‘ μ€ννμμ λ, "PRINT r c" λͺ λ Ήμ΄μ λν μ€νκ²°κ³Όλ₯Ό μμλλ‘ 1μ°¨μ λ¬Έμμ΄ λ°°μ΄μ λ΄μ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ νμ¬ν
- 1 ≤ commandsμ κΈΈμ΄ ≤ 1,000
- commandsμ κ° μμλ μλ 5κ°μ§ νν μ€ νλμ
λλ€.
- "UPDATE r c value"
- r, cλ μ νν μ μ μμΉλ₯Ό λνλ΄λ©°, 1~50 μ¬μ΄μ μ μμ λλ€.
- valueλ μ μ μ λ ₯ν λ΄μ©μ λνλ΄λ©°, μνλ²³ μλ¬Έμμ μ«μλ‘ κ΅¬μ±λ κΈΈμ΄ 1~10 μ¬μ΄μΈ λ¬Έμμ΄μ λλ€.
- "UPDATE value1 value2"
- value1μ μ νν μ μ κ°, value2λ μ μ μ λ ₯ν λ΄μ©μ λνλ΄λ©°, μνλ²³ μλ¬Έμμ μ«μλ‘ κ΅¬μ±λ κΈΈμ΄ 1~10 μ¬μ΄μΈ λ¬Έμμ΄μ λλ€.
- "MERGE r1 c1 r2 c2"
- r1, c1, r2, c2λ μ νν μ μ μμΉλ₯Ό λνλ΄λ©°, 1~50 μ¬μ΄μ μ μμ λλ€.
- "UNMERGE r c"
- r, cλ μ νν μ μ μμΉλ₯Ό λνλ΄λ©°, 1~50 μ¬μ΄μ μ μμ λλ€.
- "PRINT r c"
- r, cλ μ νν μ μ μμΉλ₯Ό λνλ΄λ©°, 1~50 μ¬μ΄μ μ μμ λλ€.
- "UPDATE r c value"
- commandsλ 1κ° μ΄μμ "PRINT r c" λͺ λ Ήμ΄λ₯Ό ν¬ν¨νκ³ μμ΅λλ€.
μ μΆλ ₯ μ
| ["UPDATE 1 1 menu", "UPDATE 1 2 category", "UPDATE 2 1 bibimbap", "UPDATE 2 2 korean", "UPDATE 2 3 rice", "UPDATE 3 1 ramyeon", "UPDATE 3 2 korean", "UPDATE 3 3 noodle", "UPDATE 3 4 instant", "UPDATE 4 1 pasta", "UPDATE 4 2 italian", "UPDATE 4 3 noodle", "MERGE 1 2 1 3", "MERGE 1 3 1 4", "UPDATE korean hansik", "UPDATE 1 3 group", "UNMERGE 1 4", "PRINT 1 3", "PRINT 1 4"] | ["EMPTY", "group"] |
| ["UPDATE 1 1 a", "UPDATE 1 2 b", "UPDATE 2 1 c", "UPDATE 2 2 d", "MERGE 1 1 1 2", "MERGE 2 2 2 1", "MERGE 2 1 1 1", "PRINT 1 1", "UNMERGE 2 2", "PRINT 1 1"] | ["d", "EMPTY"] |
βοΈ νμ΄
μ μ΄ 50 x 50μΌλ‘ κ³ μ λμ΄ μκΈ° λλ¬Έμ μ΄μ°¨μ λ°°μ΄(cell)μ κ°κ° 51κΈΈμ΄λ‘ μ μΈνλ€. PRINT λͺ λ Ήμ΄λ₯Ό μ€νν λ λ¬Έμμ΄μ falsyκ°μ μ¬μ©νκΈ° μν΄ μ΄κΈ°κ°μ λΉ λ¬Έμμ΄μ λ£μ΄μ€¬λ€. λͺ λ Ήμ΄μ λ°λΌ ν¨μλ₯Ό λ§λ€μ΄μ€¬λ€.
λ³ν©(MERGE)μ κ³ λ €νλ κ²μ΄ μ μΌ κ³ λ―Όμ΄μλλ° λ³ν©λ¬λμ§λ₯Ό νμΈνλ mergeCheckλΌλ μ΄μ°¨μ λ°°μ΄μ μ μΈνκ³ μ΄κΈ°κ°μΌλ‘λ νμ¬ μμ μ μΈλ±μ€λ₯Ό κ°μ§λλ‘ νλ€. μ΄ κ°μ΄ λ§μ½ μκΈ° μμ μ μΈλ±μ€μ μΌμΉνλ κ°μ κ°μ§ κ²½μ°μλ λ³ν©μ΄ λμ§ μκ±°λ, λ³ν©λ κ² μ€ κΈ°μ€μ΄ λλ μ μ κ°λ₯΄ν€λ κ²½μ°μ΄κ³ , λ§μ½ λ€λ₯΄λ€λ©΄ νΉμ μ κ³Ό λ³ν©λ κ²μ΄λ€. μ λ€μ΄ νλλ‘ λ³ν©λ λ λ³ν©λλ λͺ¨λ μ μ κΈ°μ€μ΄ λλ μ μ κ°λ₯΄ν€κ² λλλ° μ΄λ κ°μ κ°μ§κ³ μλ μ μ΄ λλ€. λ΄κ° μ½λλ₯Ό μμ±ν λλ MERGE λͺ λ Ήμ΄λ₯Ό μ€νν λ μμ μ€λ μμΉμ μ μ κΈ°μ€μΌλ‘ νλ€. μμλ₯Ό 보면 μ΄ν΄νκΈ° μ½λ€.
2x2λ₯Ό κΈ°μ€μΌλ‘ νλ€λ©΄ mergeCheck λ°°μ΄μ μ΄κΈ°κ°μ λ€μκ³Ό κ°λ€.
| [1, 1] | [1, 2] |
| [2, 1] | [2, 2] |
λ§μ½ [1, 1]κ³Ό [1, 2]λ₯Ό λ³ν©νλ€λ©΄ λ€μκ³Ό κ°μ΄ νκΈ°λλ€. μμ μλ κ° [1, 1]μ μ μ΄ κΈ°μ€μ΄ λλ€.
| [1, 1] | [1, 1] |
| [2, 1] | [2, 2] |
λ³ν©λμ΄ μλ μ κ³Ό ν©μΉ λμλ λ§μ°¬κ°μ§μ΄λ€. [1, 1]κ³Ό [2, 1]μ λ³ν©νλ©΄ λ€μκ³Ό κ°μ΄ λλ€.
| [1, 1] | [1, 1] |
| [1, 1] | [2, 2] |
μ΄λ λ³ν©λ κ°λ€μ λͺ¨λ ''λ₯Ό κ°μ§λλ‘ νκ³ (cell) κΈ°μ€μ΄ λλ μ λ§ μ λ ₯λ κ°μ κ°μ§λ€.
UNMERGE λͺ λ Ήμ΄μ κ²½μ° checkMergeκ°μμ κΈ°μ€μ΄ λλ μ μ μ°Ύλλ€. κΈ°μ€μ΄ λλ μ μ κ°μ μμλ‘ μ μ₯νκ³ checkMergeλ₯Ό μννλ©° κ°μ΄ κ°μ λ(κΈ°μ€μ΄ λλ μ κ³Ό λ³ν©μ΄ λμ΄μμ λ) μκΈ° μμ μ μμΉλ₯Ό μλ―Ένλ μΈλ±μ€λ‘ κ°±μ μμΌμ£Όκ³ λͺ¨λ κ°μ ''λ‘ μ΄κΈ°ν ν΄μ€ λ€μμ UNMERGEλ₯Ό μννλ μ μ μ μ₯ν΄λμλ κ°μ ν λΉνλ€.
UPDATE λͺ λ Ήμ΄μΈ κ²½μ°μλ λκ°μ§λ‘ λλ μ μλ€. κ° λͺ λ Ήμ΄λ₯Ό splitμΌλ‘ λΆλ¦¬νμ λ κΈΈμ΄μ λ°λΌ ν¨μλ₯Ό μ€ννλ©΄ λλ€. νΉμ μ μ μμΉκ°μ΄ λ€μ΄μ¨κ²½μ°(r, c, valeκ° μ‘΄μ¬ν λ) cellμμ ν΄λΉ μμΉμ κ°μ κ°±μ νλ€. μ΄λ λ³ν©λμ΄ μλμ§λ₯Ό κ³ λ €νμ¬ mergeCheckμμ κΈ°μ€μ΄ λλ μ μ r, cλ‘ κ°μ Έμμ λ³κ²½νλ€. λ§μ½ νΉμ κ°μ λ€λ₯Έ κ°μΌλ‘ λ³κ²½νλ κ²½μ°μλ(value1, value2κ° μ‘΄μ¬ν λ) νμ ν¬κΈ°κ° ν¬μ§ μκΈ° λλ¬Έμ μ 체λ₯Ό λλ©΄μ νΉμ κ°μ λ³κ²½ν κ°μΌλ‘ λ°κΏμ€λ€.
PRINT λͺ λ Ήμ΄μΈ κ²½μ°μλ λ³ν©λμ΄ μλμ§λ₯Ό κ³ λ €νμ¬ mergeCheck λ°°μ΄μμ r, cκ°μΌλ‘ κΈ°μ€μ΄ λλ μ μ μλ‘μ΄ μΈλ±μ€(checkR, checkC)κ°μ κ°μ Έμ¨λ€. μ΄λ μ΄ κ°μ΄ λΉ λ¬Έμμ΄('')μΌ λλ 'EMPTY'λ₯Ό λ°ννκ³ μλλΌλ©΄ μλ κ°μ λ°ννλ€.
β¨οΈ μ½λ
function solution(commands) {
var answer = [];
const cell = [...Array(51)].map(_ => new Array(51).fill(''));
const mergeCheck = [...Array(51)].map(_ => new Array(51));
for (let i = 1; i < 51; i++) {
for (let j = 1; j < 51; j++) {
mergeCheck[i][j] = [i, j];
}
}
const updateOne = (r, c, value) => {
const [checkR, checkC] = mergeCheck[r][c];
cell[checkR][checkC] = value;
};
const update = (value1, value2) => {
for (let i = 1; i < 51; i++) {
for (let j = 1; j < 51; j++) {
if (cell[i][j] === value1) cell[i][j] = value2;
}
}
};
const merge = (r1, c1, r2, c2) => {
const [checkR1, checkC1] = mergeCheck[r1][c1];
const [checkR2, checkC2] = mergeCheck[r2][c2];
const value = cell[checkR1][checkC1] || cell[checkR2][checkC2];
for (let i = 1; i < 51; i++) {
for (let j = 1; j < 51; j++) {
const [checkI, checkJ] = mergeCheck[i][j];
if (checkI === checkR1 && checkJ === checkC1) mergeCheck[i][j] = [checkR1, checkC1];
else if (checkI === checkR2 && checkJ === checkC2) mergeCheck[i][j] = [checkR1, checkC1];
else continue;
cell[i][j] = '';
}
}
updateOne(checkR1, checkC1, value);
};
const unmerge = (r, c) => {
const [checkR, checkC] = mergeCheck[r][c];
const value = cell[checkR][checkC];
for (let i = 1; i < 51; i++) {
for (let j = 1; j < 51; j++) {
const [checkI, checkJ] = mergeCheck[i][j];
if (checkI === checkR && checkJ === checkC) {
mergeCheck[i][j] = [i, j];
cell[i][j] = '';
}
}
}
updateOne(r, c, value);
};
const print = (r, c) => {
const [checkR, checkC] = mergeCheck[r][c];
answer.push(cell[checkR][checkC] ? cell[checkR][checkC] : 'EMPTY');
};
for (const command of commands) {
const cmd = command.split(' ');
if (cmd[0] === 'UPDATE') {
if (cmd.length === 4) updateOne(cmd[1], cmd[2], cmd[3]);
else update(cmd[1], cmd[2]);
} else if (cmd[0] === 'MERGE') {
merge(cmd[1], cmd[2], cmd[3], cmd[4]);
} else if (cmd[0] === 'UNMERGE') {
unmerge(cmd[1], cmd[2]);
} else if (cmd[0] === 'PRINT') {
print(cmd[1], cmd[2]);
}
}
return answer;
}'Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [Algorithm] λ°ννλ©΄ μ 리 (0) | 2023.04.03 |
|---|---|
| [Algorithm] κ³Όμ μ§ννκΈ° (0) | 2023.04.02 |
| [Algorithm] λμΆ© λ§λ μν (0) | 2023.03.31 |
| [Algorithm] κ°μΈμ 보 μμ§ μ ν¨κΈ°κ° (0) | 2023.03.31 |
| [Algorithm] λͺ¨λ 0μΌλ‘ λ§λ€κΈ° (0) | 2023.03.30 |