Bibi's DevLog ๐Ÿค“๐ŸŽ

[Javascript] '๋ฌธ์ž์—ด์˜ ๊ฐ€์šด๋ฐ ๊ธ€์ž ๊ฐ€์ ธ์˜ค๊ธฐ' ๋ฌธ์ œํ’€์ด ๋ณธ๋ฌธ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ/Javascript ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ

[Javascript] '๋ฌธ์ž์—ด์˜ ๊ฐ€์šด๋ฐ ๊ธ€์ž ๊ฐ€์ ธ์˜ค๊ธฐ' ๋ฌธ์ œํ’€์ด

๋น„๋น„ bibi 2020. 10. 11. 21:24

์›๋ณธ ์˜ˆ์ œ๋Š” ์•„๋ž˜ ๋งํฌ์— ์žˆ์Šต๋‹ˆ๋‹ค.

programmers.co.kr/learn/courses/30/lessons/12903(์ถœ์ฒ˜ : ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค)

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๊ฐ€์šด๋ฐ ๊ธ€์ž ๊ฐ€์ ธ์˜ค๊ธฐ

๋‹จ์–ด s์˜ ๊ฐ€์šด๋ฐ ๊ธ€์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”. ๋‹จ์–ด์˜ ๊ธธ์ด๊ฐ€ ์ง์ˆ˜๋ผ๋ฉด ๊ฐ€์šด๋ฐ ๋‘๊ธ€์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์žฌํ•œ์‚ฌํ•ญ s๋Š” ๊ธธ์ด๊ฐ€ 1 ์ด์ƒ, 100์ดํ•˜์ธ ์ŠคํŠธ๋ง์ž…๋‹ˆ๋‹ค. ์ž…์ถœ๋ ฅ ์˜ˆ s ret

programmers.co.kr

๋ฌธ์ œ ์„ค๋ช…

๋‹จ์–ด s์˜ ๊ฐ€์šด๋ฐ ๊ธ€์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”. ๋‹จ์–ด์˜ ๊ธธ์ด๊ฐ€ ์ง์ˆ˜๋ผ๋ฉด ๊ฐ€์šด๋ฐ ๋‘๊ธ€์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ œํ•œ์‚ฌํ•ญ

  • s๋Š” ๊ธธ์ด๊ฐ€ 1 ์ด์ƒ, 100์ดํ•˜์ธ ์ŠคํŠธ๋ง์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

s๊ฐ€ abcde์ผ ๋–„, return์€ c
s๊ฐ€ qwer์ผ ๋•Œ, return์€ we

 


 

 

์•„์ง ํ•จ์ˆ˜์™€ ์ธ์ˆ˜ ๋“ฑ์„ ์ฒด๊ณ„์ ์œผ๋กœ ๋ฐฐ์šฐ์ง€๋Š” ์•Š์•„์„œใ…œ
ํ˜„์žฌ ์ˆ˜๊ฐ•์ค‘์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ž…๋ฌธ๊ฐ•์˜(์ธํ”„๋Ÿฐ) ์‹ค์Šต๋ฌธ์ œ์ฒ˜๋Ÿผ, ์ฝ˜์†” ๋ฒ„์ „์œผ๋กœ ๋งŒ๋“ค์–ด ๋ณด์•˜๋‹ค.

 

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ

(๊นƒํ—™ : github.com/bibi6666667/learningJavascript/commit/c9ab0cb251667a2c8694c50aad7279946b34882a)

html ํŒŒ์ผ๋กœ ์ €์žฅํ•œ ๋‹ค์Œ ๋ธŒ๋ผ์šฐ์ €๋กœ ์‹คํ–‰ํ•˜๋ฉด ๊ฐ’์ด ์ฝ˜์†” ์ฐฝ์— ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2>์ฝ”์ฝ”์•„ ํ…Œ์ŠคํŠธ1</h2>
๊ธธ์ด 1์ด์ƒ, 100์ดํ•˜์ธ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.<br>
๊ฐ€์šด๋ฐ ๊ธ€์ž๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. (์ฝ˜์†” ๋ฒ„์ „)<br>
<input type="text" id="input">
<button onclick="testlength()">๊ฐ€์šด๋ฐ ๊ธ€์ž๋ฅผ ๋ณด์—ฌ์ค˜</button>
<script>
    function testlength() {
        // ๋ฌธ์ž์ธ์ง€ ํ™•์ธ - ๋ฌธ์ž ๊ธธ์ด ํ™•์ธ
        var str = document.getElementById("input").value;
        var len = str.length;
        if (isNaN(str) === false){
            console.log("์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.")
        } else if (len < 1 || len > 100) {
            console.log("๊ธธ์ด 1์ด์ƒ, 100์ดํ•˜์ธ ๊ธ€์ž๋กœ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.");
        } else {
            solution(str, len);
        }
    }

    function solution(str, len) {
        if (len % 2 === 1) {
            console.log('ํ™€์ˆ˜ ๊ธ€์ž!');
            var sliceOdd = ((len + 1) / 2) - 1
            var slicedOdd = str.slice(sliceOdd, sliceOdd + 1);
            console.log(slicedOdd);
        } else if (len % 2 === 0) {
            console.log('์ง์ˆ˜ ๊ธ€์ž!');
            var sliceEven1 = (len / 2) - 1
            var sliceEven2 = (len / 2) + 1
            var slivedEven = str.slice(sliceEven1, sliceEven2);
            console.log(slivedEven);
        }
    }
</script>
</body>
</html>

 

  • ํ•จ์ˆ˜ testlength()

document.getElementById(~).value;
์›น ๋ฌธ์„œ์—์„œ id ๊ฐ’์ด ~ ์ธ ๋Œ€์ƒ์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.(str)

str.length;
str์˜ ๊ธธ์ด(๊ธ€์ž ์ˆ˜) ๋ฅผ ๊ตฌํ•œ๋‹ค.

isNaN()
is not a number์˜ ์•ฝ์ž.
() ์•ˆ์˜ ๊ฐ’์ด ์ˆซ์ž์ด๋ฉด false๋ฅผ, ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • ํ•จ์ˆ˜ solution()

๊ธ€์ž์ˆ˜๊ฐ€ ํ™€์ˆ˜์ธ์ง€ ์ง์ˆ˜์ธ์ง€ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด,
๊ธ€์ž ์ˆ˜๋ฅผ 2๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๊ฐ€ 1์ธ์ง€(=ํ™€์ˆ˜) ์•„๋‹ˆ๋ฉด 0์ธ์ง€(์ง์ˆ˜) ํŒ๋ณ„ํ•œ๋‹ค.

๊ธ€์ž๋ฅผ ์ž˜๋ผ๋‚ด๋Š” ๋ฐ์—๋Š” .slice() ๋ฅผ ํ™œ์šฉ.

i. ํ™€์ˆ˜ ๋ฌธ์ž์—ด์ผ ๋•Œ (A.length % 2 === 1)

์˜ˆ๋ฅผ ๋“ค์–ด '๊ฐ•์•„์ง€'์™€ ๊ฐ™์€ 3(n)๊ธ€์ž์˜ ํ™€์ˆ˜ ๋ฌธ์ž์—ด์˜ ๊ฐ€์šด๋ฐ ๊ธ€์ž๋Š” 2๋ฒˆ์งธ ๊ธ€์ž์ธ '์•„'์ด๋‹ค.
์ฆ‰ (3+1)/2 = 2๋ฒˆ์งธ ๊ธ€์ž, ๊ณต์‹ํ™”ํ•˜๋ฉด (n+1)/2 ๋ฒˆ์งธ ๊ธ€์ž๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค.
(์ด๋•Œ (n+1)/2 ๋ฅผ a๋ผ๊ณ  ํ•˜์ž)
๊ทธ๋Ÿฐ๋ฐ .slice()์˜ ๋ฌธ๋ฒ•์„ ๋”ฐ๋ผ์•ผ ํ•˜๋ฏ€๋กœ,
/๊ฐ•/์•„/์ง€/ ์—์„œ '์•„'๋ฅผ ์ถœ๋ ฅํ•˜๋ ค๋ฉด
์Šฌ๋ผ์ด์Šค 1๊ณผ 2 ์‚ฌ์ด, ์ฆ‰ a-1๊ณผ a ์‚ฌ์ด ๊ฐ’์„ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค. (์ฒซ๋ฒˆ์งธ=0๋ฒˆ์งธ)
-> ์ฆ‰ n๊ธ€์ž์˜ ํ™€์ˆ˜ ๋ฌธ์ž์—ด A์—์„œ ๊ฐ€์šด๋ฐ ๊ธ€์ž๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด
A.slice( a -1 , a ); ๋กœ ์ง€์ •ํ•ด์•ผ ํ•˜๋ฉฐ,
์ด๋•Œ a๋Š” (n+1)/2 ์ด๋ฏ€๋กœ A.slice( { (n+1)/2 } -1 , (n+1)/2 ); ๋กœ ๋ฐ”๊ฟ” ์“ธ ์ˆ˜ ์žˆ๋‹ค.


ii. ์ง์ˆ˜ ๋ฌธ์ž์—ด์ผ ๋•Œ (B.length % 2 === 0)

์˜ˆ๋ฅผ ๋“ค์–ด '์˜ค๋ž‘์šฐํƒ„'๊ณผ ๊ฐ™์€ 4(m)๊ธ€์ž์˜ ์ง์ˆ˜ ๋ฌธ์ž์—ด์—์„œ ๊ฐ€์šด๋ฐ ๋‘ ๊ธ€์ž๋Š” 2,3๋ฒˆ์งธ ๊ธ€์ž์ธ '๋ž‘์šฐ'์ด๋‹ค.
์ฆ‰ 4/2=2๋ฒˆ์งธ ๊ธ€์ž์™€ 4/2+1=3๋ฒˆ์งธ ๊ธ€์ž, ๊ณต์‹ํ™”ํ•˜๋ฉด m/2๋ฒˆ์งธ ๊ธ€์ž์™€ m/2+1๋ฒˆ์งธ ๊ธ€์ž๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค. 
(์ด๋•Œ m/2๋ฅผ b๋ผ๊ณ  ํ•˜์ž)
์—ญ์‹œ .slice()์˜ ๋ฌธ๋ฒ•์„ ๋”ฐ๋ผ์•ผ ํ•˜๋ฏ€๋กœ
/์˜ค/๋ž‘/์šฐ/ํƒ„/ ์—์„œ '๋ž‘์šฐ'๋ฅผ ์ถœ๋ ฅํ•˜๋ ค๋ฉด
์Šฌ๋ผ์ด์Šค 1๊ณผ 3 ์‚ฌ์ด, ์ฆ‰ b-1๊ณผ b+1 ์‚ฌ์ด ๊ฐ’์„ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค. (์ฒซ๋ฒˆ์งธ=0๋ฒˆ์งธ)
-> ์ฆ‰ m๊ธ€์ž์˜ ์ง์ˆ˜ ๋ฌธ์ž์—ด B์—์„œ ๊ฐ€์šด๋ฐ ๊ธ€์ž๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด
B.slice( b-1, b+1 ); ๋กœ ์ง€์ •ํ•ด์•ผ ํ•˜๋ฉฐ,
์ด๋•Œ b๋Š” m/2์ด๋ฏ€๋กœ B.slice( (m/2)-1, (m/2)+1 ); ๋กœ ๋ฐ”๊ฟ” ์“ธ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์ƒˆ๋กœ ์•Œ๊ฒŒ ๋œ ๊ฒƒ (๊ตฌ๊ธ€๋ง์˜ ๋„์›€)

isNaN() 
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ์ž/์ˆซ์ž ํŒ๋ณ„.
is not a number์˜ ์ค„์ธ๋ง๋กœ, ๊ด„ํ˜ธ ์•ˆ์˜ ๋‚ด์šฉ์ด ์ˆซ์ž์ธ์ง€ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ์ง€ ํŒ๋ณ„ํ•ด์คŒ.
๊ด„ํ˜ธ ์•ˆ์ด ์ˆซ์ž์ด๋ฉด false, ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•จ.