2022.12.19.MON

ronglong·2022년 12월 19일
0

코드스테이츠 Day43

  1. 오전 데일리 코딩
    balancedBrackets 문제였는데, 시뮬레이션 방법으로 풀려고 시도했다.
    그런데 마지막 d단계를 구현을 못해서 10/12만 통과함 ㅠ
    [(]{)} 등의 경우를 걸러내는 식을 못 썼다.
public class Solution { 
	public boolean balancedBrackets(String str) {
    //빈 문자열 거르기
    if(str.length()==0) return true;
    if(str.length()%2==1) return false;

    //괄호의 종류를 단 한가지로 한정합니다.
    String part1 = str.replaceAll("\\[", "").replaceAll("\\]","").replaceAll("\\{","").replaceAll("\\}","");
    for(int i=0; i<part1.length()/2; i++){
      String part = String.valueOf(part1.charAt(i)) + String.valueOf(part1.charAt(part1.length()-1-i)); 
      if(!part.equals("()")) return false;
    }

    //다른 종류의 괄호도 추가. 
    String part2 = str.replaceAll("\\(", "").replaceAll("\\)","").replaceAll("\\{","").replaceAll("\\}","");
    for(int i=0; i<part2.length()/2; i++){
      String part = String.valueOf(part2.charAt(i)) + String.valueOf(part2.charAt(part2.length()-1-i)); 
      if(!part.equals("[]")) return false;
    }

    String part3 = str.replaceAll("\\[", "").replaceAll("\\]","").replaceAll("\\(","").replaceAll("\\)","");
    for(int i=0; i<part3.length()/2; i++){
      String part = String.valueOf(part3.charAt(i)) + String.valueOf(part3.charAt(part3.length()-1-i)); 
      if(!part.equals("{}")) return false;
    }

    // 괄호는 닫힌 괄호가 시작되면, 이후로 열린 괄호가 입력될 수 없습니다 (이럴 경우 실패)
    // 문제의 실패한 마지막 코드
    for(int i=0; i<str.length()/2; i++){
      if(str.charAt(i)==')' || str.charAt(i)=='}' || str.charAt(i)==']') return false;
    }

    return true;
	} 
}

레퍼런스 코드에서 너무 복잡하게 풀어서 이해가 잘 안 되길래, 구글링 했더니 진짜 핵 간단한 방법이 있었음.

public class Solution { 
	public boolean balancedBrackets(String str) {
    //빈 문자열 거르기
    if(str.length()==0) return true;
    if(str.length()%2==1) return false;

    // 구글링을 통해 찾은 레퍼런스 코드
    while (str.contains("()") || str.contains("[]") || str.contains("{}")) {
    str = str.replaceAll("\\(\\)", "")
      .replaceAll("\\[\\]", "")
      .replaceAll("\\{\\}", "");

    if(str.length()==0) return true;
    }
    return false;
	} 
}

쏘굿. 그리고 괄호 없을 때는 앞에 '\' 2개 써야함.
Java replace 주의사항
https://mean79.tistory.com/478

  1. 스프링 MVC - 서비스 계층
  • 각 핸들러 메서드가 전달 받은 요청을 서비스 로직에서 처리
  • API 계층에서는 Dto 객체를 사용 / 서비스 계층에서는 Entity 객체를 사용
  • 도메인 엔티티(Entity) : 서비스 계층에서 데이터 액세스 계층과 연동하면서 비즈니스 로직을 처리하기 위해 필요한 데이터
  • Dto와 Entity를 전환해주는 Mapper 클래스가 필요
  • Dto와 Entity를 분리함으로써, 계층별 관심사 분리+코드 단순화+선택적으로 특정 정보만 클라이언트에게 제공 가능
  • Mapper 클래스에서 사용하는 애너테이션 : @Getter, @Setter, @AllArgsConstructor, @NoArgsConstructor
  • Controller에서는 DI 및 메서드 호출을 통해 서비스 계층, Mapper 클래스와 연동
  • DI를 위해, 서비스 계층에 @Service, Mapper 클래스에 @Component 통해서 빈 등록.
  • 생성자가 하나일 경우, @Autowired 생략 가능
  • Mapper 자동 생성 by MapStruct : 인터페이스 만들고 전체 인터페이스 위에 @Mapper(componentModel = "string") 추가.
  1. 기타 찾아본 것
    -lombok @ToString 예시
    https://blog.naver.com/PostView.nhn?blogId=seek316&logNo=222359108413&categoryNo=0&parentCategoryNo=0&viewDate=¤tPage=1&postListTopCurrentPage=1&from=postView

<느낀 점>
데일리 코딩 그래도 꽤 풀었는데 마지막에 못 풀어서 아쉽다.
내일 문제는 풀 수 있길!

오늘 학습 내용은 나름대로 이해했다고 생각하지만, 막상 과제 할 때는 페어님이랑 실습했던 내용을 좀 컨닝했다.. ㅎ
실제로 안 보고 바로 만들기는 낯설었던 것 같다.

온갖 편리한 기능들이 이미 Spring에 많이 있다. 수많은 라이브러리들,,
Spring을 배우면 배울수록 이거 만든 사람들 정말 광기라는 생각밖에 안 든다. ㅋㅋㅋㅋㅋ⭐️

내일부터 이틀은 예외처리 공부를 한다. 섹션 3 재미있다.
내일은 아쉽게도 페어 시간이 없는 대신 딥토크 시간이 있다.
이번 페어님과는 그래도 같이 차근히 과제를 해내고 있고, 많이 배우고 있다.

0개의 댓글