'*' 모양의 바로 왼쪽에 위치한 '*' 모양이 아닌 문자를 삭제한다. (별 하나에 문자 하나 삭제 가능)
모든 별이 제거된 문자열을 반환하면 된다.
입력은 동작이 항상 가능하도록 주어질 것이다.
결과 문자열이 항상 고유하다는 것을 알 수 있다.
문제 해결 과정
스택으로 해결해볼까 생각이 든다.
문자열 s를 문자 하나씩 검사해서 '*'이외의 문자는 push '*'이 나오면 pop 연산을 수행한다.
만약 스택이 비어있는 경우 '*'이 나오면 실패로 처리하면 되지만 해당 문제에서는 그런 경우는 고려하지 않는다.
스택, 리스트, 덱 등을 사용하면 시간 복잡도가 상당히 커진다.
그래서 StringBuilder에서 deleteCharAt() 메소드를 사용해서 마지막 원소를 제거해줄 수 있고, 시간 복잡도를 줄일 수 있었다.
김영한 스프링 기초 강의 듣고 정리하기
어제 배운 '회원 서비스 테스트'에서 수업 진도에 포함되지 않는 테스트 코드를 직접 작성해 봤습니다.
전체회원조회의 테스트 코드
해당 코드는 회원 2명을 가입시킨 다음 전체회원조회 로직인 memberRepository.findAll()에 가입된 회원 2명이 모두 포함되는지 확인하는 것으로 테스트를 진행했습니다.
회원조회의 테스트 코드
해당 부분에서도 마찬가지로 회원 2명을 가입시킨 후 memberRepository.findById(Long id)를 사용해서 Member를 반환받고 해당 Member가 찾는 멤버인지 비교해주는 방식으로 테스트를 진행했습니다.
@Test
void 전체회원조회() {
// given
Member member1 = new Member();
member1.setName("spring1");
Member member2 = new Member();
member2.setName("spring2");
// when
memberService.join(member1);
memberService.join(member2);
// then
List<Member> members = memberRepository.findAll();
assertThat(members.contains(member1) && members.contains(member2)).isEqualTo(true);
}
@Test
void 회원조회() {
// given
Member member1 = new Member();
member.setName("spring");
Member member2 = new Member();
member2.setName("summer");
// when
memberService.join(member1);
memberService.join(member2);
// then
Member findMember = memberRepository.findById(member1.getId()).get();
assertThat(member1).isEqualTo(findMember); // assertThat에 member2를 넣으면 fail
}
코드스테이츠 수업 정리(Section 4 - OAuth 2와 JWT를 이용한 샘플 애플리케이션 구현)
CSR 방식으로 OAuth2를 구현하는 파트였습니다.
OAuth2로 인증을 받은 후에 JWT를 발급해서 프론트엔드와 백엔드에서 로그인을 유지하는 방식입니다.
Heart - 글 삭제시 연결된 태그 개수 음수로 변하는 부분 수정하기
태그의 개수가 음수로 표시되는 부분이 있었습니다. 그래서 해당 부분을 고쳐보았습니다.
코드를 살펴보니 RecruitService의 deleteRecruit와 FreeService의 deleteFree의 코드에 있는 메서드에서 count 값이 0보다 큰 경우에만 값이 줄어들도록 설정했습니다.
DB와 안맞는 개수를 직접 맞춰줬습니다. ㅎㅎ...
// before
tag.setFreeCount(tag.getFreeCount() - 1);
// after
tag.setFreeCount(tagCnt > 1 ? tagCnt - 1 : 0);
운동하기 - 웨이트 트레이닝
5일차!
느낀점
리트코드에서 문자열 문제가 나왔습니다. 스택으로 할 수는 있었지만 시간복잡도가 난장판인 관계로 StringBuilder로 갈아타게 됐습니다.
코드스테이츠 수업 파트는 실제 개발하면서 OAuth2 기능을 구현할 때 많이 참고했던 부분이라 읽으면서 내용이 잘 기억났습니다. 그래도 이전에 정리해 둔 내용이 많아서 다행입니다. ㅎㅎ
프로젝트 때 다른 팀원들의 코드를 깊게 살펴보지 못했는데, 오늘 보니 많이 곤란했습니다... 이걸 어디서부터 고쳐야 할지 고민중입니다.
오늘도 오운완-!
내일 할 일
LeetCode 데일리 문제 풀기
김영한 스프링 기초 강의 듣고 정리하기
Heart - 회원가입, 회원정보 수정, 자유글 등록시 이미지 객체 없어도 코드 동작하도록 수정