🟣 였늘의 문제 회고

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

😘 였늘의 문제 ν•₯짝 #1

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] Lv1 : 3진법 뒀집기

문제 μ„€λͺ…
μžμ—°μˆ˜ n이 λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§‘λ‹ˆλ‹€. n을 3진법 μƒμ—μ„œ μ•žλ’€λ‘œ 뒀집은 ν›„, 이λ₯Ό λ‹€μ‹œ 10μ§„λ²•μœΌλ‘œ ν‘œν˜„ν•œ 수λ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

μ œν•œμ‚¬ν•­

  • n은 1 이상 100,000,000 μ΄ν•˜μΈ μžμ—°μˆ˜μž…λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

nresult
457
125229

λ‚˜μ˜ 풀이

function solution(n) {
  var answer = n
    .toString(3)
    .split("")
    .reduce((acc, cur) => cur + acc, "");
  return parseInt(answer, 3);
}

κ΅¬ν˜„ μ ‘κ·Ό
μ •μˆ˜ μ§„μˆ˜ λ³€ν™˜
1. μ •μˆ˜ n을 toString을 톡해 νŠΉμ • μ§„μˆ˜λ₯Ό λ¬Έμžμ—΄λ‘œ λ°˜ν™˜.
2. split("")λ₯Ό 톡해 λ°°μ—΄λ‘œ λ°˜ν™˜ ν›„
3. reduceλ₯Ό 톡해 λ¬Έμžμ—΄μ„ λ’€μ§‘μ–΄μ„œ λ°˜ν™˜.
-μ΄λ²ˆμ—λŠ” reverseλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  λ’€μ§‘λŠ” 방법이 λ¬΄μ—‡μžˆμ„κΉŒ κ³ λ―Όν•˜λ‹€ μ‚¬μš©ν•˜κ²Œ 됨!
4. parseIntλ₯Ό 톡해 10μ§„μˆ˜λ‘œ λ‹€μ‹œ λ³€ν™˜.

parseInt λ¬Έμžμ—΄μ„ νŠΉμ • μ§„μˆ˜μ˜ μ •μˆ˜λ‘œ λ³€ν™˜ν•œλ‹€.
μΈμˆ˜λ‘œλŠ” parseInt('λ³€ν™˜μ‹œν‚€κ³ μžν•˜λŠ” λ¬Έμžμ—΄', ν•΄λ‹Ή 수의 μ§„μˆ˜) κ°€ λ“€μ–΄κ°„λ‹€.


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

#1

const solution = (n) => {
    return parseInt([...n.toString(3)].reverse().join(""), 3);
}

풀이
μŠ€ν”„λ ˆλ“œ 문법을 톡해 3μ§„μˆ˜λ‘œ λ³€ν™”ν•œ μ •μˆ˜λ“€μ„ λ°°μ—΄λ‘œ λ°˜ν™˜ν•œ ν•œ 쀄 μ½”λ“œ

#2

function solution(n) {
    return parseInt(n.toString(3).split('').reverse().join(''), 3);
}

풀이
return에 parseInt의 인자둜 ν•œλ²ˆμ— λ©”μ„œλ“œλ₯Ό μ μš©ν•˜μ—¬ ν•œ 쀄 μ½”λ“œ μž‘μ„±.


😘 였늘의 문제 ν•₯짝 #2

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] Lv1 : μ΄μƒν•œ 문자 λ§Œλ“€κΈ°

문제 μ„€λͺ…
λ¬Έμžμ—΄ sλŠ” ν•œ 개 μ΄μƒμ˜ λ‹¨μ–΄λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 각 λ‹¨μ–΄λŠ” ν•˜λ‚˜ μ΄μƒμ˜ 곡백문자둜 κ΅¬λΆ„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 각 λ‹¨μ–΄μ˜ 짝수번째 μ•ŒνŒŒλ²³μ€ λŒ€λ¬Έμžλ‘œ, ν™€μˆ˜λ²ˆμ§Έ μ•ŒνŒŒλ²³μ€ μ†Œλ¬Έμžλ‘œ λ°”κΎΌ λ¬Έμžμ—΄μ„ λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜, solution을 μ™„μ„±ν•˜μ„Έμš”.

μ œν•œμ‚¬ν•­

  • λ¬Έμžμ—΄ μ „μ²΄μ˜ 짝/ν™€μˆ˜ μΈλ±μŠ€κ°€ μ•„λ‹ˆλΌ, 단어(곡백을 κΈ°μ€€)λ³„λ‘œ 짝/ν™€μˆ˜ 인덱슀λ₯Ό νŒλ‹¨ν•΄μ•Όν•©λ‹ˆλ‹€.
  • 첫 번째 κΈ€μžλŠ” 0번째 인덱슀둜 보아 짝수번째 μ•ŒνŒŒλ²³μœΌλ‘œ μ²˜λ¦¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

sreturn
"try hello world""TrY HeLlO WoRlD"

λ‚˜μ˜ 풀이

function solution(s) {
  let answer = s.split("");
  for (let i = 0; i < answer.length; i++) {
    if (answer[i] === "") return "";
    if (i % 2 === 0 || i === 0) answer[i].toUpperCase();
    else answer[i].toLowerCase();
    console.log(answer);
  }
  return answer;

κ΅¬ν˜„ μ ‘κ·Ό
1. 전체 λ¬Έμžμ—΄μ„ λ‚˜λ‰˜μ–΄ λ°°μ—΄λ‘œ λ°˜ν™˜.
2. for문을 μˆœνšŒν•˜λ©° i의 값이 짝수면 ν•΄λ‹Ή 인덱슀 값을 λŒ€λ¬Έμžλ‘œ λ³€ν™˜ν•˜μ—¬ ν• λ‹Ή.
3. ν™€μˆ˜λ©΄ μ†Œλ¬Έμžλ‘œ λ³€ν™˜ν•˜μ—¬ ν• λ‹Ή.

문제점
1. λ³€ν™˜ν•œ 값을 할당을 ν•΄μ€˜μ•Ό ν•˜λŠ”λ° 할당을 ν•˜μ§€ μ•Šκ³  λ³€ν™˜λ§Œ ν•˜μ—¬ return λ˜λŠ” 값이 μ—†μ—ˆλ‹€.

for (let i = 0; i < answer.length; i++) {
  if (i % 2 === 0) {
    answer[i] = answer[i].toUpperCase();
  } else {
    answer[i] = answer[i].toLowerCase();
  }
}
return answer.join(" ");

κ°œμ„ μ€ μ™„λ£Œ ν–ˆμ§€λ§Œ, ν•΄λ‹Ή μ½”λ“œμ˜ λ¬Έμ œμ μ€
전체 λ¬Έμžμ—΄μ„ μˆœνšŒν•˜κ³  있기 λ•Œλ¬Έμ— 곡백을 κΈ°μ€€μœΌλ‘œ λŒ€ μ†Œλ¬Έμžλ₯Ό λ‚˜λ‰˜μ§€ λͺ» 함.


split λ©”μ†Œλ“œμ— 곡백을 μΆ”κ°€ν•˜μ—¬ λ‹¨μ–΄λ³„λ‘œ λ‚˜λ‰˜μ—ˆμ„ λ•Œ 풀이.

function solution(s) {
  if (s === "") return "";

  let answer = s.split(" ");
  for (let i = 0; i < answer.length; i++) {
    for (let j = 0; j < answer[i].length; j++) {
      if (j % 2 === 0) {
        answer[i] = answer[i].substr(0, j) + answer[i][j].toUpperCase() + answer[i].substr(j + 1);
      } else {
        answer[i] = answer[i].substr(0, j) + answer[i][j].toLowerCase() + answer[i].substr(j + 1);
      }
    }
  }
  return answer.join(" ");
 
}

이 μ½”λ“œμ—μ„œλŠ”
answer[i].substr(0, j) + answer[i][j].toUpperCase() + answer[i].substr(j + 1)
λ₯Ό μ‚¬μš©ν•˜μ—¬ answer[i]의 j번째 문자λ₯Ό λŒ€λ¬Έμž λ˜λŠ” μ†Œλ¬Έμžλ‘œ λ³€κ²½ν•˜κ³ , λ³€κ²½λœ λ¬Έμžμ—΄μ„ answer[i]에 λ‹€μ‹œ ν• λ‹Ήν•©λ‹ˆλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ, join() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ°°μ—΄μ˜ μš”μ†Œλ₯Ό 곡백으둜 μ—°κ²°ν•˜μ—¬ μ΅œμ’… κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

MDN-String.substring( ) λ©”μ†Œλ“œ κ°œλ…
String.prototype.substring()
substring() λ©”μ†Œλ“œλŠ” string 객체의 μ‹œμž‘ 인덱슀둜 λΆ€ν„° μ’…λ£Œ 인덱슀 μ „ κΉŒμ§€ λ¬Έμžμ—΄μ˜ λΆ€λΆ„ λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

ꡬ문 : str.substring(indexStart[, indexEnd])

indexStart
λ°˜ν™˜λ¬Έμžμ—΄μ˜ μ‹œμž‘ 인덱슀

indexEnd
μ˜΅μ…˜. λ°˜ν™˜λ¬Έμžμ—΄μ˜ λ§ˆμ§€λ§‰ 인덱슀 (ν¬ν•¨ν•˜μ§€ μ•ŠμŒ.)

splitλ©”μ†Œλ“œμ— 곡백을 μΆ”κ°€ν•˜μ—¬ ν•΄λ‹Ή 배열듀을 λ‚˜λ‰˜μ–΄ 각각의 λ‹¨μ–΄λ³„λ‘œ 배열을 λ‚˜λ‰˜μ—ˆμ§€λ§Œ,
이쀑 for문을 μ‚¬μš©ν•˜κ³  싢지 μ•Šμ•„ κ°œμ„ μ μ„ λ¬Όμ–΄λ³΄κ²Œ 됐닀.


μ±—gpt 풀이

이쀑 for문을 없앨 수 μžˆλŠ” 방법은 λ‹€μ–‘ν•˜μ§€λ§Œ,
ν•œ 가지 방법은 split() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  λ¬Έμžμ—΄μ„ μˆœνšŒν•˜λ©΄μ„œ 단어와 각 λ‹¨μ–΄μ˜ 짝/ν™€μˆ˜ 인덱슀λ₯Ό νŒλ‹¨ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

이λ₯Ό μœ„ν•΄ λ¨Όμ € λ‹¨μ–΄μ˜ μ‹œμž‘κ³Ό 끝 인덱슀λ₯Ό μ°Ύμ•„μ•Ό ν•©λ‹ˆλ‹€.
λ‹¨μ–΄μ˜ μ‹œμž‘ μΈλ±μŠ€λŠ” λ°”λ‘œ 이전 λ¬Έμžκ°€ κ³΅λ°±μ΄κ±°λ‚˜ λ¬Έμžμ—΄μ˜ μ‹œμž‘μΌ λ•Œμ΄κ³ , λ‹¨μ–΄μ˜ 끝 μΈλ±μŠ€λŠ” λ‹€μŒ λ¬Έμžκ°€ κ³΅λ°±μ΄κ±°λ‚˜ λ¬Έμžμ—΄μ˜ 끝일 λ•Œμž…λ‹ˆλ‹€.

function solution(s) {
  if (s === "") return "";

  let answer = "";
  let isEven = true;

  for (let i = 0; i < s.length; i++) {
    if (s[i] === " ") {
      //λ‹¨μ–΄μ˜ μ‹œμž‘μ΄ 곡백인 경우 곡백 κ·ΈλŒ€λ‘œ μΆ”κ°€.
      answer += " ";
      
      // λ¬Έμžκ°€ μ•„λ‹Œ 경우 λ‹¨μ–΄μ˜ μ‹œμž‘ λ˜λŠ” 끝인지 확인.
      isEven = true; 
      continue;
    }

    if (isEven) { // 단어λ₯Ό μˆœνšŒν•˜λ©° 짝수일 λ•Œ λŒ€λ¬Έμžλ‘œ λ³€ν™˜ κ°’ μž¬ν• λ‹Ή
      answer += s[i].toUpperCase();
      isEven = false; // false둜 λ§Œλ“€μ–΄ λ‹€μŒ μ˜€λŠ” 인덱슀λ₯Ό ν™€μˆ˜λ‘œ νŒλ‹¨.
    } else {	// false의 elseλŠ” μ†Œλ¬Έμžλ‘œ λ³€ν™˜ κ°’ μž¬ν• λ‹Ή.
      answer += s[i].toLowerCase();
      isEven = true; // 
    }
  }

  return answer;
}

이 μ½”λ“œμ—μ„œλŠ” isEven λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ ν˜„μž¬ λ¬Έμžκ°€ 짝수 μΈλ±μŠ€μΈμ§€ μ—¬λΆ€λ₯Ό μΆ”μ ν•©λ‹ˆλ‹€. for 루프λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ˜ 각 문자λ₯Ό μˆœνšŒν•˜λ©΄μ„œ, ν˜„μž¬ λ¬Έμžκ°€ 곡백인 κ²½μš°λŠ” κ·ΈλŒ€λ‘œ μΆ”κ°€ν•˜κ³ , λ¬Έμžκ°€ μ•„λ‹Œ κ²½μš°λŠ” λ‹¨μ–΄μ˜ μ‹œμž‘ λ˜λŠ” 끝인지λ₯Ό ν™•μΈν•©λ‹ˆλ‹€.
이λ₯Ό 톡해 각 문자λ₯Ό 짝/ν™€μˆ˜ μΈλ±μŠ€μ— 따라 λŒ€μ†Œλ¬Έμžλ‘œ λ³€ν™˜ν•˜μ—¬ μƒˆ λ¬Έμžμ—΄ answer에 μΆ”κ°€ν•©λ‹ˆλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ answerλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

isEven λ³€μˆ˜λŠ” ν˜„μž¬ 문자의 μΈλ±μŠ€κ°€ μ§μˆ˜μΈμ§€ μ—¬λΆ€λ₯Ό μΆ”μ ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
λ”°λΌμ„œ ν˜„μž¬ λ¬Έμžκ°€ λ‹¨μ–΄μ˜ μ‹œμž‘μ΄λ©΄, isEven λ³€μˆ˜λ₯Ό false둜 μ„€μ •ν•˜μ—¬ λ‹€μŒ λ¬Έμžκ°€ ν™€μˆ˜ μΈλ±μŠ€κ°€ λ˜λ„λ‘ ν•©λ‹ˆλ‹€.
κ·Έλ ‡κ²Œ ν•¨μœΌλ‘œμ¨ λ‹€μŒ 문자λ₯Ό μ†Œλ¬Έμžλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.

λ°˜λŒ€λ‘œ, ν˜„μž¬ λ¬Έμžκ°€ λ‹¨μ–΄μ˜ 끝이면, isEven λ³€μˆ˜λ₯Ό true둜 μ„€μ •ν•˜μ—¬ λ‹€μŒ λ¬Έμžκ°€ 짝수 μΈλ±μŠ€κ°€ λ˜λ„λ‘ ν•©λ‹ˆλ‹€. κ·Έλ ‡κ²Œ ν•¨μœΌλ‘œμ¨ λ‹€μŒ 문자λ₯Ό λŒ€λ¬Έμžλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ isEven λ³€μˆ˜λ₯Ό false λ˜λŠ” true둜 μž¬ν• λ‹Ήν•˜λŠ” 것은 λ‹€μŒ 문자λ₯Ό λŒ€μ†Œλ¬Έμžλ‘œ λ³€ν™˜ν•˜κΈ° μœ„ν•œ μž‘μ—…μž…λ‹ˆλ‹€.

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

0개의 λŒ“κΈ€