🟣 였늘의 문제 회고

κΉ€νƒœμš±Β·2023λ…„ 4μ›” 10일
0
post-thumbnail

πŸ₯Ή 였늘의 문제 ν•₯짝 #1

문제 μ„€λͺ…
0κ³Ό 1둜 이루어진 μ–΄λ–€ λ¬Έμžμ—΄ x에 λŒ€ν•œ 이진 λ³€ν™˜μ„ λ‹€μŒκ³Ό 같이 μ •μ˜ν•©λ‹ˆλ‹€.

x의 λͺ¨λ“  0을 μ œκ±°ν•©λ‹ˆλ‹€.
x의 길이λ₯Ό c라고 ν•˜λ©΄, xλ₯Ό "cλ₯Ό 2μ§„λ²•μœΌλ‘œ ν‘œν˜„ν•œ λ¬Έμžμ—΄"둜 λ°”κΏ‰λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄, x = "0111010"이라면, x에 이진 λ³€ν™˜μ„ κ°€ν•˜λ©΄ x = "0111010" -> "1111" -> "100" 이 λ©λ‹ˆλ‹€.

0κ³Ό 1둜 이루어진 λ¬Έμžμ—΄ sκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§‘λ‹ˆλ‹€. sκ°€ "1"이 될 λ•ŒκΉŒμ§€ κ³„μ†ν•΄μ„œ s에 이진 λ³€ν™˜μ„ κ°€ν–ˆμ„ λ•Œ, 이진 λ³€ν™˜μ˜ νšŸμˆ˜μ™€ λ³€ν™˜ κ³Όμ •μ—μ„œ 제거된 λͺ¨λ“  0의 개수λ₯Ό 각각 배열에 λ‹΄μ•„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

μ œν•œμ‚¬ν•­

  • s의 κΈΈμ΄λŠ” 1 이상 150,000 μ΄ν•˜μž…λ‹ˆλ‹€.
  • sμ—λŠ” '1'이 μ΅œμ†Œ ν•˜λ‚˜ 이상 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

sresult
"110010101001"[3,8]
"01110"[3,3]
"1111111"[4,1]

λ‚˜μ˜ 풀이


function solution(x) {
  let answer = [0, 0];
  for (let count = 0; count < x.length; count++) {
    let sliceZero = 0;
    x.split("").filter((e) => (e != "0" ? e : (sliceZero += e.length))).length;
    let inNum = toString(x.length);
  }
  if (inNum === 1) answer[0] = count;
}

κ΅¬ν˜„ μ ‘κ·Ό
1. answer에 [0,0] 배열을 ν• λ‹Ήν•˜μ—¬ answer[0]에닀 λ³€ν™˜ 된 λˆ„μ  값을
answer[1]에닀 제거된 0의 개수λ₯Ό ν• λ‹Ήν•˜λ € ν–ˆλ‹€.
2.for문을 μ μš©ν•œ 것 λΆ€ν„°κ°€ 문제의 μ‹œμž‘μ΄μ—ˆλ‹€,,
3. λ°˜λ³΅μ„ 톡해 splitλ©”μ†Œλ“œλ‘œ λ°˜ν™˜ 된 배열을 filter λ©”μ†Œλ“œλ₯Ό 톡해 μΆ”μΆœν•˜λ € ν–ˆμœΌλ‚˜
4. μ—¬κΈ°μ„œλΆ€ν„° 생각이 μ΄μ–΄λ‚˜κ°€μ§€ λͺ» ν–ˆλ‹€.

κ²°κ΅­μ—” GPTμ—κ²Œ μ½”λ“œλ¦¬λ·°λ₯Ό ν•˜κ²Œ 됐으며, μ•„μ£Ό λƒ‰ν˜Ήν•œ ν”Όλ“œλ°±μ„ 받을 수 μžˆμ—ˆλ‹€.

κ·Έλ ‡κ²Œ μˆ˜μ •λœ μ½”λ“œλŠ”

function solution(s) {
  let binaryCount = 0; // 이진 λ³€ν™˜ 횟수
  let zeroCount = 0; // 제거된 0의 개수
  
  while (s !== "1") {
    // 1단계: 0 제거 및 제거된 0의 개수 λˆ„μ 
    zeroCount += s.split("0").length - 1;
    
    // 2단계: sλ₯Ό μ΄μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜μ—¬ μƒˆλ‘œμš΄ s둜 κ°±μ‹ 
    s = (s.split("1").length - 1).toString(2);
    
    // 이진 λ³€ν™˜ 횟수 증가
    binaryCount++;
  }
  
  return [binaryCount, zeroCount];
}

ν•΄λ‹Ή κ΅¬ν˜„μ„ ν…ŒμŠ€νŠΈν•œ κ²°κ³Ό λ°”λ‘œ ν…ŒμŠ€νŠΈ 톡과λ₯Ό ν•  수 μžˆμ—ˆλ‹€.


λ‹€λ₯Έ μ‚¬λžŒ 풀이

#1

function solution(s) {
    var answer = [0,0];
    while(s.length > 1) {
        answer[0]++;
        answer[1] += (s.match(/0/g)||[]).length;
        s = s.replace(/0/g, '').length.toString(2);
    }
    return answer;
}

풀이
1. μ •κ·œμ‹μ„ μ΄μš©ν•œ λ©”μ†Œλ“œλ“€μ„ μ΄μš©ν•˜μ—¬ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ ν•˜μ˜€λ‹€.

#2

function solution(s) {

    let answer = [0,0]

    while(s !== '1') {
        s = s.split('');
        let temp = s.filter(v => v === '1').length;
        answer[0] ++;
        answer[1] += s.length - temp;
        s = temp.toString(2);
    }

    return answer;
}

풀이
1.인터넷에 검색을 톡해 μ°Ύμ•„λ³Έ κ²°κ³Ό λ‚΄κ°€ ν•˜κ³ μž ν–ˆλ˜ 풀이 방식이 μžˆμ—ˆλ‹€.


🫠 μ†Œκ°

λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 것 λΆ€ν„° ν•΄μ„œ ν•΄λ‹Ή λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ λ°˜ν™˜ν•˜λŠ” 값이 μ™œ ν•„μš”ν•œμ§€,
λ°˜ν™˜ν•œ 값을 어디에 μ–΄λ–»κ²Œ μ μš©ν•˜κ³ μž ν•˜λŠ”μ§€,
λΆ„λͺ…ν•œ λͺ©μ κ³Ό λͺ…ν™•ν•œ κ²°κ³Ό λŒ€μž…μ΄ μžˆμ–΄μ•Ό ν•œλ‹€λŠ” 것을 깨달을 수 μžˆμ—ˆλ‹€.

μ½”λ“œλ₯Ό ν•œ 쀄 ν•œ 쀄 μž‘μ„±ν•˜λ©΄μ„œ μ™œμ— λŒ€ν•œ 생각을 κΎΈμ€€νžˆ λŒ€μž…ν•  수 μžˆλ„λ‘ λ…Έλ ₯ ν•΄μ•Όκ² λ‹€.

profile
방법을 연ꡬ할 쀄 μ•„λŠ” 개발자!

0개의 λŒ“κΈ€