2023.1.16

In9_9yu·2023년 1월 16일
1
post-thumbnail

오늘 할 일 📖

1. 코딩 테스트 준비

2. CS 준비

  • 아무것도 안하기 (?)

3. 개인 프로젝트

  • DTO를 사용하는 이유
  • nestJs에서 try~catch 없이 throw를 던지는 경우
  • Prisma로 create 이후, 특정 컬럼을 숨기고 싶은 경우
  • 유저 정보를 변경하고자 할 때 PUT vs PATCH

느낀 점 🙄

1. 코딩 테스트 준비

문제 풀 때 항상 고질병이, 어디 하나 막히면 그걸로 멍때리느라 시간을 너무 허비한다.

그리고 구현력이 너무 약해서 슬프다

자두나무 문제를 2차원 배열로 해결할 수 있을 것 같은데, 특정 케이스 (예를 들어, 한 나무에서 버티는 경우가 가장 많은 자두를 먹는 경우) 를 어떻게 처리 해야 할 지 감이 안 온다.

슬쩍 다른 답들을 보니 3차원 dp를 사용하던데, 직관적으로 이해가 안되서 일단 2차원 배열로 문제를 풀어보는 걸로 결정.

  • 코드가 궁금하신가요…? 물론 틀린 답입니다만 🙄
    import sys
    
    input = sys.stdin.readline
    
    T, W = map(int, input().split())
    plum_trees = [int(input()) for _ in range(T)]
    
    dp = [[0] * T for _ in range(W + 1)]
    
    dp[0][0] = plum_trees[0] % 2
    dp[1][0] = (dp[0][0] + 1) % 2
    
    for i in range(1, T):
        dp[0][i] = dp[0][i - 1] + plum_trees[i] % 2
    
    for i in range(1, W + 1):
        for j in range(i, T):
            if plum_trees[j] % 2 == (i + 1) % 2:
                dp[i][j] = max(dp[i][j - 1] + 1, dp[i - 1][j - 1] + 1)
            else:
                dp[i][j] = max(dp[i][j - 1], dp[i - 1][j - 1])
    
    print(dp[-1][-1])
    
    for x in dp:
        print(*x)

2. CS 관련

이것 저것 하다 보니 준비를 못하네… 요즘에 DB 만져보느라 (정확히 말하면 ORM이긴 하지만…) 시간이 많이 걸릴 것 같으니 DB 관련 책을 일정 분량 씩 읽고 정리해보자…

사놓고 읽지 않았던… 파워 오브 데이터베이스

3. 개인 프로젝트 (?)

  1. DTO를 사용하는 이유는 간단하게 클라이언트로부터 들어오는 값을 검증하겠다 아닌가?

    검증 뿐만 아니라, Pipe 옵션 설정을 통해서 특정 타입으로 변환도 가능하다.

    비슷한 개념들이 상당히 많은 것 같은데, filter , guard , pipe 의 사용처가 각각 다르겠지…?

    보니까 각 상황마다 DTO를 작성하는 경우가 많은 것 같더라.

  1. nestJs에서 try~catch 내부에 throw 하지 않더라도 올바르게 에러를 핸들링하는 모습을 봤다.

    try~catch 블럭 내부에 throw를 한 경우 에러 로그를 좀 더 자세하게 보여주는 것 같던데, 결과 자체가 다르지는 않았다.

    try~catch없이도 에러를 핸들링 할 수 있는 이유는 nestJs 자체적으로 built-in exception filter가 있다고 한다.

    mdn문서에 따르면, throw를 하면 callstack의 첫번째 catch 블록에 제어 흐름이 넘어간다고 하던데, 그러면 built-in exception filter 가 첫번째 callstack에 있다고 봐도 되는 것일런지…

    걔 코드는 어디서 까봅니꺼?

  2. Prisma를 통해서 유저를 생성하고, 그 값을 반환하게 되면 비밀번호까지 포함해서 주는 문제가 있었다. 이런 문제를 해결하기 위해 select 옵션을 사용하면 되는데,

    this.prismaService.create({
    	data: {...},
    	select: {
    		password:false,
    	}
    }),

    위 방식대로 하니 적어도 하나 이상의 컬럼은 true로 놓아야한다는 오류가 뜬다.

    다음과 같이 작성해줬더니 동작은 잘 하는데, 그럼 매번 저렇게 써줘야하나싶다.

    this.prismaService.create({
    	data: {...},
    	select: {
    		email:true,
    		password:false,
    		...
    	}
    }),

    노션에서 보심 더 이쁩니다...(?)

    훈수 환영합니다.

profile
FE 임니다

2개의 댓글

comment-user-thumbnail
2023년 2월 1일

파워오브데이터베이스 잘 읽고 계신가요?
그나저나 이름이 팰린드롬으로 바뀌었군요!

1개의 답글