[TIL] 230516

먼지·2023년 5월 16일
0

TIL

목록 보기
52/57
post-thumbnail

오늘한것

프로그래머스 코테입문 Day 18

Day 18
문자열, 수학, 조건문, 정렬

문자열안에 문자열

문자열 str1, str2가 매개변수로 주어집니다. str1 안에 str2가 있다면 1을 없다면 2를 return하도록 solution 함수를 완성해주세요.

function solution(str1, str2) {
    return str1.includes(str2) ? 1 : 2
}

제곱수 판별하기

어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수 n이 매개변수로 주어질 때, n이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.

function solution(n) {
    return Number.isInteger(Math.sqrt(n)) ? 1 : 2
}

세균 증식

어떤 세균은 1시간에 두배만큼 증식한다고 합니다. 처음 세균의 마리수 n과 경과한 시간 t가 매개변수로 주어질 때 t시간 후 세균의 수를 return하도록 solution 함수를 완성해주세요.

function solution(n, t) {
    // 7 14 28 56 112
    let num = n;
    let answer = n;
    for(let i=0; i<t; i++) {
        answer += num;
        num += n; 
        num = answer;
    }
    return answer;
}

이 문제는 이상하게 풀어버렸다. 저 위에 주석으로 써놓고도 규칙이 생각이 안 났는지 이전 숫자를 더한 걸 더하고 더하는 요상한 방식으로 풀어서 다시 풀었다!

이건 다른 사람의 풀이인데 신기해서 이해하려고 적는다. 비트 연산자는 처음 알았다

// 비트 연산자
function solution(n, t) {
  return n << t;
}

function solution(n, t) {
    while (t-- > 0) n*=2;
    return n;
}

// Math.pow
function solution(n, t) {

    return n*Math.pow(2,t);
}

function solution(n, t) {
    return n*(2**(t))
}

// 내가 풀려던 방식은 아마 이거
function solution(n, t) {
    let answer = n;
    for(let i = 0; i < t; i++){
        answer *= 2
    }
    return answer;
}

function solution(n, t) {
    var answer = 0;
    answer = n * (2**t);
    return answer;
}

정말 간단한 문제인데 풀이가 가지각색인 게 신기하당. 다른 사람의 풀이를 보며 많이 배워가는 것 같다.

문자열 정렬하기 (2)

영어 대소문자로 이루어진 문자열 my_string이 매개변수로 주어질 때, my_string을 모두 소문자로 바꾸고 알파벳 순서대로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요.

function solution(my_string) {
    return [...my_string.toLowerCase()].sort().join('')
}

벌써 Day 18! 문자열 정렬하기같이 자바스크립트 메서드를 써서 해결할 수 있는 문제들은 진짜 금방 푸는 것 같다. 오늘은 15분 내로 4문제를 다 풀었다. 아무래도 실력을 늘리려면 level 2~3을 풀어야 하지만 지금은 습관을 들여서 자신감을 키우려는 거니까..! 며칠 뒤엔 더 어려운 문제도 같이 풀어봐야겠다.


Next.js

내가 듣는 유데미 Next.js 강의 파트랑 현재 설치한 버전인 13이 다른데 공식문서엔 뭐가 이리도 많고 다 영어라 어디서부터 어떻게 학습해야 할지 몰라서 일단 이것저것 만져보며 배운 것 같다ㅜㅜ

페이지 만들기

내가 설치한 latest 버전에선 src/app 디렉토리로 관리되는데, app에 api폴더도 작성하고 css파일 layout도 다 들어있어서 역할? 의미는 아직 모르겠다.. 일단 app 폴더에 라우팅을 할 파일들을 작성하는데 폴더이름이 url 부분이고 파일 이름은 무조건 page로 작성해야 한다.

// app/classics/page.tsx
export default function Page() {
  return (
    <div>Page</div>
  )
}

// app/classics/[slug]/page.tsx
type Props = {
  params: {
    slug: string;
  };
};

export default function Page({ params }: Props) {
  return <h1>{params.slug} Page!</h1>
}
  • app/classics 에 작성된 건 url이 domain.com/classics 접속하면 보이고
  • app/classics/[slug]/page.tsx에 작성된 건 domain.com/classics/~에 접속 시 확인할 수 있다!

getStaticProps & getServerSideProps

얘네는.. 직접 api에서 데이터를 가져오는 것도 아닌데 DUMMY_CLASSICS 데이터를 읽어오지 못해와서 낼 해결하려고 한다^^

import { GetStaticProps } from 'next'
import ClassicList from '@/components/classics/ClassicList';

export interface Classic {
  id: number;
  title: string;
  composer: string;
  genre: string;
  year: number;
  duration: string;
  description: string;
  coverImage: string;
}

export const DUMMY_CLASSICS: Classic[] = [
  {
    id: 1,
    title: "쇼팽 피아노 협주곡 2번",
    composer: "Frédéric Chopin",
    genre: "Concerto",
    year: 1830,
    duration: "35:00",
    description: "쇼팽의 피아노 협주곡 F단조 2번 Op. 21은 그의 피아노와 오케스트라를 위한 가장 유명한 작곡 중 하나입니다.",
    coverImage: "...",
  },
];

interface Props {
  classics: Classic[];
}

export default function Home(props: any) {
  console.log(props)
  return (
    <main className="">
      <ClassicList classics={classics} />
    </main>
  )
}

export async function getServerSideProps() {
  // fetch data from an API
  // 서버에서실행됨 클라이언트X
  return {
    props: DUMMY_CLASSICS
  };
}

// export const getStaticProps = () => {
//   // fetch data from an API
//   return {
//     props: {
//       test: 'DUMMY_CLASSICS',
//     },
//   }
// }

그리고 api 폴더에 form에 연결할 mongodb connect handler 함수 코드를 작성하는데 제대로 돌아가지 않아서 내일 해결!~

npm i Node.js 에러

npm err! code err_ssl_cipher_operation_failed

프로젝트들을 리팩토링하고 깃과 깃허브를 연습하기 위해 포크해온 저장소를 다 로컬에 clone해와서 npm i를 하려고 하는데 똑같은 에러가 계속 뜨는 거다..!!!!
정말 구글링하고 챗지피티한테 물어봐서 별걸 다 해봤는데 해결이 안 돼서 괴로웠다.

  1. nvm으로 버전 낮추기.
node -v
18.16.0

nvm install 16.16.0
nvm use 16.16.0

node -v
18.16.0 <- 안 바뀜
  1. npm cache clean --force

  2. 와파껐다다시켜기

  3. node_modules 폴더 삭제하고 다시 설치. 이걸 젤 많이..

rm -rf node_modules
npm install
  1. npm 저장소 변경
npm config set registry https://registry.npmjs.org/

정말 나온 건 다 해봤는데 안 돼서 마지막에 어저께 새로 깔은 따끈따끈한 18.16.0 nodejs 프로그램을 삭제하고 16.16.0을 다운받아서 설치했더니 됐다.. 하하

좀 많이 지쳐서 내일부터 브랜치 따서 코딩 진행해야겠다. 파이팅!

profile
꾸준히 자유롭게 즐겁게

0개의 댓글