20210104-TIL

나영원·2021년 1월 5일
0

T.I.L.

목록 보기
102/145

오늘 공부할 내용

  • 오전 알고리즘 문제풀이
  • 오후 Spring 심화 복습
  • 저녁 Spring 심화 수업
  • TiL 정리 및 Git & 블로그 업데이트

오늘 공부한 것 & 배운 내용

알고리즘 문제풀이

  • 주말동안 알고리즘 수업 복습으로 프로그래머스 levelTest1을 풀었는데 테스트를 3번 볼동안 합격을 못해서 충격을 받아 매일 알고리즘 문제를 푸는시간을 가지자고 생각을 하였다

  • 문제 1 문자열다루기

    • 풀이

      class Solution {
          public boolean solution(String s) {
              char[] array = s.toCharArray();
      
              if(s.length() == 4 || s.length() == 6){
                  for (char c : array) {
                      if (Character.isLetter(c)){
                          return false;
                      }
                  }
      
              } else {
                 return false;
              }
              return true;
          }
      }
    • Character.isLetter라는 메소드를 알면 쉽게 풀 수있는 문제였는데 모르고 있어서 IDE에 도움으로 메소드를 찾았다..

      • 공부할땐 이것도 하나의 방법이겠지만 모르고는 어떻게 푸는지 궁금하다

        class Solution {
          public boolean solution(String s) {
              if(s.length() == 4 || s.length() == 6){
                  try{
                      int x = Integer.parseInt(s);
                      return true;
                  } catch(NumberFormatException e){
                      return false;
                  }
              }
              else return false;
          }
        }
        • 이런식으로 익셉셥을 띄워서 찾는 방법도 있었다.. 이것도 처음에 생각했는데 exception을 어떻게 다룰지 모르겠다고 생각했는데 try catch로 그냥 잡으면 되는것이었다;;
  • 문제2 크레인 인형뽑기 게임

    • 풀이

      import java.util.Stack;
      
      class Solution {
          public int solution(int[][] board, int[] moves) {
              int answer = 0;
              Stack<Integer> basket = new Stack<>();
      
              Integer lastDoll = 0;
              for (int i = 0; i < moves.length ; i++) {
                  for (int j = 0; j < board.length ; j++) {
                      if (board[j][moves[i]-1] > 0) {
                          basket.push(board[j][moves[i]-1]);
                          board[j][moves[i]-1] = 0;
      
                          if(basket.size() >=2) {
                              if(lastDoll.equals(basket.peek())){
                                  basket.pop();
                                  basket.pop();
                                  answer+=2;
                              }
                          }
                          if(!basket.empty()){
                              lastDoll = basket.peek();
                          }
      
                          break;
                      }
                  }
              }
              return answer;
          }
      }
      • 지난번에 풀었던 문제인데도 다시푸니 똑같이 오래 걸렸다.. 문제를 푸는 로직을 모른다기보다는 내가 짜는 코드가 어떻게 돌아가는지 몰라서 테스트하고 디버깅하는데 시간이 오래걸렸다
        • 실제로 코딩하면서 이런 시간들을 줄여나가는 것도 도움이 많이 될 것 같다
      • 테스트케이스 2번이 시간초과로 계속 통과를 못했는데

복습 Spring-day5

  • Entity에 @Column(name)은 db와 변수명에 의존성을 줄여주기 위해 달아주는게 좋다

    • 만약에 리팩토링으로 변수명을 변경시키면 db의 컬럼명도 영향을 줄수 있기 때문이다. db생성시에 이런걸 걸어주면 변수명을 바꿔줄 수 있다
      • db는 한번 생성후에는 변경하기가 굉장히 어렵기 때문에 이런 장치들을 만들어두는게 좋다.
      • 이렇게 자바 변수와 db의 컬럼간의 관계를 연결한게 ORM이다
    • name에 뜨는 에러는 db를 연결해주면 해결하게 된다.
      • IDE에 에러는 해결해주고 가는게 바람직하다
  • 질의 응답

    • 강의 복습하면서 궁금한것들을 강사님께 여쭤봤고 답변을 받았다

      • DTO의 Validator로 충분한지 아니면 따로 더 구현을 하는지?

        • DTO는 포멧에 대한 검증만 하고 논리적인 검증은 별도의 valdation을 구현한다
          • 포멧에 대한 검증은 Controller에 역할이맞다
      • 클라이언트와 서버 어디서 검증하는게 좋은건가?

        • 정답은 둘다 한다.
      • 영속성 컨텍스트에 생성시점과 계속 사용하는지에 대해서

        • 영속성 컨텍스트는 EntityMangerBean에서 관리하게 되고 서버로딩과 함께 사용되서 재사용된다. 하지만 context에 캐쉬는 transaction단위로 flush되기 때문에 @Transactional 어노테이션 내에서만 생명주기를 가지고 있다

내일 공부할 내용

  • 오전 알고리즘문제 풀이
  • 오후 알고리즘 수업
  • 저녁 스프링심화 복습
  • TiL 정리 및 Git & 블로그 업데이트
profile
배우는 개발 일기

0개의 댓글