๐Ÿ‘ฉโ€๐Ÿ’ป/JavaScript

[Programmers] JavaScript ํ–‰๋ ฌ์˜ ๋ง์…ˆ, ํ‚คํŒจ๋“œ ๋ˆ„๋ฅด๊ธฐ ๋ฌธ์ œ

ํ•œ๋‚˜ 2021. 1. 28. 19:43

๋ฌธ์ œ

ํ–‰๋ ฌ์˜ ๋ง์…ˆ์€ ํ–‰๊ณผ ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ๊ฐ™์€ ๋‘ ํ–‰๋ ฌ์˜ ๊ฐ™์€ ํ–‰, ๊ฐ™์€ ์—ด์˜ ๊ฐ’์„ ์„œ๋กœ ๋”ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. 2๊ฐœ์˜ ํ–‰๋ ฌ arr1๊ณผ arr2๋ฅผ ์ž…๋ ฅ๋ฐ›์•„, ํ–‰๋ ฌ ๋ง์…ˆ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ ์กฐ๊ฑด

  • ํ–‰๋ ฌ arr1, arr2์˜ ํ–‰๊ณผ ์—ด์˜ ๊ธธ์ด๋Š” 500์„ ๋„˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

 

 

 

์ฝ”๋“œ

function solution(arr1, arr2) {
let a = [];
for (let i = 0; i < arr1.length; i++) {
let b = [];
for (let j = 0; j < arr1[0].length; j++) {
b.push(arr1[i][j] + arr2[i][j]);
}
a.push(b);
}
return a;
}
// map๊ณผ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
// function sumMatrix(A, B) {
// return A.map((a, i) => {
// a.map((b, j) => {
// b + B[i][j]
// })
// })
// }
view raw sum_of_matrix.js hosted with โค by GitHub

์ฒซ ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ ํ–‰๋ ฌ์ด ๊ฐ๊ฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด์˜จ๋‹ค.

๊ฐ ํ–‰๋ ฌ์˜ ๊ฐ™์€ ํ–‰, ์—ด๋ผ๋ฆฌ ๋”ํ•ด์„œ ์ƒˆ๋กœ์šด ํ–‰๋ ฌ์„ ๋ฆฌํ„ดํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ค‘์ฒฉ๋œ for ๋ฌธ์„ ์‚ฌ์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋Š”๋ฐ, map์„ ํ†ตํ•ด ๊ฐœ์„ ํ•œ ์ฝ”๋“œ๋ฅผ ๋ดค๋‹ค. ๋ฐฐ์—ด์„ ๋‹ค๋ฃฐ ๋•Œ๋Š” map()์„ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์ •๋ง ๊น”๋”ํ•ด์ง„๋‹ค. map์˜ ์ธ์ˆ˜๋กœ ์›์†Œ, ๊ทธ๋ฆฌ๊ณ  ์ธ๋ฑ์Šค๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ๊ตณ์ด ์ผ๋ฐ˜ for ๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

๋ฌธ์ œ

2020 ์นด์นด์˜ค ์ธํ„ด์‹ญ ํ‚คํŒจ๋“œ ๋ˆ„๋ฅด๊ธฐ ๋ฌธ์ œ

์ด ์ „ํ™” ํ‚คํŒจ๋“œ์—์„œ ์™ผ์†๊ณผ ์˜ค๋ฅธ์†์˜ ์—„์ง€์†๊ฐ€๋ฝ๋งŒ์„ ์ด์šฉํ•ด์„œ ์ˆซ์ž๋งŒ์„ ์ž…๋ ฅํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋งจ ์ฒ˜์Œ ์™ผ์† ์—„์ง€์†๊ฐ€๋ฝ์€ * ํ‚คํŒจ๋“œ์— ์˜ค๋ฅธ์† ์—„์ง€์†๊ฐ€๋ฝ์€ # ํ‚คํŒจ๋“œ ์œ„์น˜์—์„œ ์‹œ์ž‘ํ•˜๋ฉฐ, ์—„์ง€์†๊ฐ€๋ฝ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์—„์ง€์†๊ฐ€๋ฝ์€ ์ƒํ•˜์ขŒ์šฐ 4๊ฐ€์ง€ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ‚คํŒจ๋“œ ์ด๋™ ํ•œ ์นธ์€ ๊ฑฐ๋ฆฌ๋กœ 1์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์™ผ์ชฝ ์—ด์˜ 3๊ฐœ์˜ ์ˆซ์ž 1, 4, 7์„ ์ž…๋ ฅํ•  ๋•Œ๋Š” ์™ผ์† ์—„์ง€์†๊ฐ€๋ฝ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ ์—ด์˜ 3๊ฐœ์˜ ์ˆซ์ž 3, 6, 9๋ฅผ ์ž…๋ ฅํ•  ๋•Œ๋Š” ์˜ค๋ฅธ์† ์—„์ง€์†๊ฐ€๋ฝ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์šด๋ฐ ์—ด์˜ 4๊ฐœ์˜ ์ˆซ์ž 2, 5, 8, 0์„ ์ž…๋ ฅํ•  ๋•Œ๋Š” ๋‘ ์—„์ง€์†๊ฐ€๋ฝ์˜ ํ˜„์žฌ ํ‚คํŒจ๋“œ์˜ ์œ„์น˜์—์„œ ๋” ๊ฐ€๊นŒ์šด ์—„์ง€์†๊ฐ€๋ฝ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 4-1. ๋งŒ์•ฝ ๋‘ ์—„์ง€์†๊ฐ€๋ฝ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ™๋‹ค๋ฉด, ์˜ค๋ฅธ์†์žก์ด๋Š” ์˜ค๋ฅธ์† ์—„์ง€์†๊ฐ€๋ฝ, ์™ผ์†์žก์ด๋Š” ์™ผ์† ์—„์ง€์†๊ฐ€๋ฝ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ˆœ์„œ๋Œ€๋กœ ๋ˆ„๋ฅผ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด numbers, ์™ผ์†์žก์ด์ธ์ง€ ์˜ค๋ฅธ์†์žก์ด์ธ ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด hand๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ ๋ฒˆํ˜ธ๋ฅผ ๋ˆ„๋ฅธ ์—„์ง€์†๊ฐ€๋ฝ์ด ์™ผ์†์ธ ์ง€ ์˜ค๋ฅธ์†์ธ ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์—ฐ์†๋œ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • numbers ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 1 ์ด์ƒ 1,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • numbers ๋ฐฐ์—ด ์›์†Œ์˜ ๊ฐ’์€ 0 ์ด์ƒ 9 ์ดํ•˜์ธ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.
  • hand๋Š” "left" ๋˜๋Š” "right" ์ž…๋‹ˆ๋‹ค.
    • "left"๋Š” ์™ผ์†์žก์ด, "right"๋Š” ์˜ค๋ฅธ์†์žก์ด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ์™ผ์† ์—„์ง€์†๊ฐ€๋ฝ์„ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ๋Š” L, ์˜ค๋ฅธ์† ์—„์ง€์†๊ฐ€๋ฝ์„ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ๋Š” R์„ ์ˆœ์„œ๋Œ€๋กœ ์ด์–ด๋ถ™์—ฌ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ return ํ•ด์ฃผ์„ธ์š”.

 

์ฝ”๋“œ

function solution (numbers, hand) {
const position = {
1: [0, 0], 2: [0, 1], 3: [0, 2],
4: [1, 0], 5: [1, 1], 6: [1, 2],
7: [2, 0], 8: [2, 1], 9: [2, 2],
'*': [3, 0], 0: [3, 1], '#': [3, 2],
};
let currentL = '*', currentR = '#';
let result = '';
for (const num of numbers) {
if (num % 3 === 1) {
result += 'L';
currentL = num;
} else if (num % 3 === 0 && num !== 0) {
result += 'R';
currentR = num;
} else {
result += calDist(num, currentL, currentR, position, hand);
result[result.length - 1] === 'L' ? currentL = num : currentR = num;
}
}
return result;
}
function calDist(num, currentL, currentR, pos, hand) {
const X = 0, Y = 1;
const leftDist = Math.abs(pos[currentL][X] - pos[num][X]) + Math.abs(pos[currentL][Y] - pos[num][Y]);
const rightDist = Math.abs(pos[currentR][X] - pos[num][X]) + Math.abs(pos[currentR][Y] - pos[num][Y]);
if (leftDist === rightDist) return hand === 'right' ? 'R' : 'L';
return leftDist > rightDist ? 'R' : 'L'
}
view raw keypad.js hosted with โค by GitHub

ํ–‰๋ ฌ ๋ฌธ์ œ์™€ ๋น„์Šทํ•˜๊ฒŒ ์ ‘๊ทผํ•ด์•ผ ํ–ˆ๋˜ ํ‚คํŒจ๋“œ ๋ฌธ์ œ.

์ฒ˜์Œ์—๋Š” ํ‚คํŒจ๋“œ ๊ฐ€์šด๋ฐ ์ˆซ์ž์ธ [2, 5, 8, 0] ๋“ค์— ๊ฐ๊ฐ ์ตœ๊ทผ์ ‘ ๊ฑฐ๋ฆฌ์— ํ•ด๋‹นํ•˜๋Š” ๋ฒ”์œ„๋ฅผ ๊ตฌํ•ด ๊ณ„์‚ฐํ–ˆ๋Š”๋ฐ, ์‚ฌ์‹ค์€ ๊ฐ๊ฐ์˜ ์ˆซ์ž ๋ฒˆํ˜ธ๋“ค์— X, Y ์ขŒํ‘œ๊ฐ’์„ ์„ค์ •ํ•ด์ฃผ๋ฉด ์‰ฝ๊ฒŒ ํ’€๋ฆฌ๋Š” ๋ฌธ์ œ์˜€๋‹ค.

 

๊ฐ€์žฅ ๋จผ์ € ๊ณ„์‚ฐํ•˜๊ธฐ ์‰ฝ๋„๋ก ์–‘์ˆ˜๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ X, Y ์ขŒํ‘œ๊ฐ’์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

์‹œ์ž‘ ์œ„์น˜๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ค€ ๋’ค, ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•  ๋ฌธ์ž์—ด์„ ๋‹ด์„ ๋ณ€์ˆ˜ result๋„ ์ดˆ๊ธฐํ™”ํ•ด์ค€๋‹ค.

 

๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ์„ ์œ„ํ•ด ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ ๋‹ค. ๊ฑฐ๋ฆฌ๋Š” ์–‘์ˆ˜์—ฌ์•ผ๋งŒ ํ•˜๋ฏ€๋กœ, Math.abs() ๋ฉ”์†Œ๋“œ๋กœ ์ ˆ๋Œ“๊ฐ’ํ™”ํ•ด์ค€๋‹ค. ์˜ค๋ฅธ์†์žก์ด์ธ์ง€, ์™ผ์†์žก์ด์ธ์ง€์— ๋”ฐ๋ผ ๊ฑฐ๋ฆฌ๊ฐ€ ๋™์ผํ•  ๊ฒฝ์šฐ ์„ ํƒํ•ด์•ผ ํ•˜๋Š” ์œ„์น˜๊ฐ€ ๋‹ค๋ฅด๋ฏ€๋กœ ํ•ด๋‹น ํ•จ์ˆ˜์— ๊ธฐ๋Šฅ์„ ๋„ฃ์–ด์ค€๋‹ค.

 

for of ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๋ˆŒ๋Ÿฌ์•ผ ํ•  ํ‚คํŒจ๋“œ ๋ฐฐ์—ด์ธ numbers์˜ ์›์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ˆ๋‹ค. ์™ผ์†์œผ๋กœ ๋ˆŒ๋Ÿฌ์•ผ ํ•  ๋ชฉ๋ก์€ 1, 4, 7 ๋”ฐ๋ผ์„œ 3์œผ๋กœ ๋‚˜๋ˆด์„ ๋•Œ 1๋กœ ํ•˜๋‚˜์”ฉ ๋–จ์–ด์ง„๋‹ค. ์˜ค๋ฅธ์†์œผ๋กœ ๋ˆŒ๋Ÿฌ์•ผ ํ•  ๋ชฉ๋ก์€ 3์œผ๋กœ ๋‚˜๋ˆ„์—ˆ์„ ๋•Œ 0์œผ๋กœ ๋–จ์–ด์ง€์ง€๋งŒ, 0์€ ์ œ์™ธ ํ•ด์•ผ ํ•œ๋‹ค.

 

๊ฐ€์šด๋ฐ ํ‚คํŒจ๋“œ ๋ฒˆํ˜ธ๋ฅผ ๋ˆŒ๋Ÿฌ์•ผ ํ•  ๋•Œ ์•„๊นŒ ๋งŒ๋“ค์–ด๋‘” ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๊ทธ๋ ‡๊ฒŒ ํ•ด์„œ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ˆ„๋ฅธ ํ‚ค์˜ ์† ์œ„์น˜(result[result-length -1]์— ๋”ฐ๋ผ ์˜ค๋ฅธ์† ์œ„์น˜์™€ ์™ผ์† ์œ„์น˜๋„ ๋‹ค์‹œ ๊ฐ’์„ ํ• ๋‹นํ•ด์ค€๋‹ค.