목록전체 글 (82)
고딩왕 코범석
[프로그래머스] 징검다리 건너기, Python3 문제 링크! 제한사항 및 유의사항 stones 배열의 크기는 1 ~ 200,000 stones 배열의 각 원소의 크기는 1 ~ 200,000,000 위의 두가지 때문에 모든 경우의 수를 체크하기엔 효율성 채점에서 시간 초과 판정을 받을 것이다. 친구들은 k를 넘은 칸 만큼 건널 수 없다. k는 1 이상 stones길이 이하 자연수 풀이전략 시간 초과 판정을 피하기 위해 이분 탐색으로 접근하자 접근 시 탐색 기준값(mid)의 의미는 징검다리를 건널 수 있는 친구들의 수를 의미한다. start = 1, end = max(stones) start = 1인 이유 : 모든 stones[i] >= 1 임을 만족하므로 mid = (start + end) // 2 매번 ..
[프로그래머스] 보석 쇼핑, Python3 [프로그래머스] 보석 쇼핑 문제 제한사항 어피치는 우선 일렬로 보석들을 한줄에 싹 쓸어담아 구매한다. 배열의 구간을 띄워서 사지 않는다! solution의 매개변수인 gems(보석 진열 배열)의 크기가 100,000 까지이다. 100,000의 크기를 하나씩 일렬로 검사하는 것은 O(n * n)이므로 시간 초과가 발생할 것이다. 풀이전략 먼저, 보석의 종류를 파악하기 set(gems)를 활용해 보석의 종류 수를 파악하기 만약 종류가 1가지일 경우는 [1, 1] / 종류의 수와 배열의 크기가 같다면 [1, len(gems)]를 바로 리턴쳐주자. dict 선언하기 { "보석" : 해당 보석의 갯수 } 의 형태 start, end 포인트를 지정하자. start, end..
이번 포스팅에서는 2020 카카오 인턴십 코딩테스트 문제 중 두 번째 문제인 수식 최대화 문제에 대해 풀이를 해볼 것이다. 문제 설명 제한 사항 테스트케이스 문제는 여기로! 우선 나는 이 문제를 어떻게 풀지 몰라 감이 안잡혀 다른 분의 코드를 참조했다.거의 베낀 것이나 다를바 없다 그치만 코드를 하나씩 살펴보면서 재귀에 대한 이해, 재귀를 사용할 때 코드의 간결함을 보고 많이 배운 코드였다. 풀이 방법 priorities 라는 배열을 선언했다. 이곳에는 연산자들의 우선순위를 담아두었다. priorities에 있는 우선순위들을 하나씩 대입하여 해당 연산의 결과를 얻어낸다. 연산 결과를 절댓값으로 바꾸어 최댓값을 비교하고 정답을 리턴한다. def get_result(n, priority, expression..
이번 포스팅에서는 2020 카카오 인턴십 코딩테스트 문제 중 첫 번째 문제인 키패드 누르기 문제에 대해 풀이를 해볼 것이다. 나의 풀이 방법 키패드를 딕셔너리로 표현했다. 문제에서 1,4,7 은 왼손, 3,6,9는 오른손으로 눌러야하기 때문에 left, right 라는 배열을 만들어서 저장해두었다. 2,5,8,0을 누를 때 마다 왼손, 오른손의 거리를 비교해야 한다. 이 때를 위해 현재 왼쪽, 오른쪽의 위치를 저장해두는 변수를 설정했다. (초기값 왼쪽 : *, 오른쪽 : #) 현재 손가락의 위치에서 누를 번호까지의 거리를 계산하는 메서드를 따로 작성했다. 거리가 같다면 hand 변수에 써있는 값을 통해 왼손으로 누를지, 오른손으로 누를지 결정한다. def get_distance(now, destinati..
이번 포스팅은 면접에도 자주 나올것 같은 주제라서 한번 정리해보려고 한다. 우선 SOLID가 어떤 것인지 파악부터 해보자 S : 단일 책임 원칙 (SRP - Single Responsibility Principle) O : 개방 폐쇄 원칙 (OCP - Open/Closed Principle) L : 리스코프 치환 원칙 (LSP - Liskov Substitution Principle) I : 인터페이스 분리 원칙 (ISP - Interface Segregation Principle) D : 의존관계 역전 원칙 (DIP - Dependency Inversion Principle) 1. 단일 책임 원칙 (Single Responsibility Principle) 한 클래스는 하나의 책임만 가져야한다. 이게 ..
오늘은 이 에러에 대해서 정리해보겠다. 스프링 데이터 JPA를 학습하는 와중에 서버를 다시 올렸을 때 발생했다. 이 에러였는데 먼저 Dto 클래스에서 생성자에 대한 에러였다. 아놔 이 뿡빵 이게 뭐가 문젠데! 한 2~30분간 얼탔다. 에러 메세지를 좀 더 자세히 읽어보았다. Error creating bean with name 'memberRepository' defined in springData.jpa.repository.MemberRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method ..
Parameter {INDEX} of constructor in 'A' required a bean of type 'B' that could not be found. 당신뭐야..ㅠ 왜 내공부 방해하는데! 오늘은 제목에 대한 에러 원인을 파악하다 흥미로운 사실을 알게되어 이곳에 적게되었다. 요즘 한창 인프런에서 김영한님의 JPA 강의를 듣는 중이다. 라이브코딩으로 같이 코드를 적으면서 이해하고 다시 빌드하는 과정에서 저 에러메세지가 뜨고 서버가 올라가지 않았다. 아래 사진은 에러가 난 위치. 에러 메세지에서 A = 'OrderApiController', B = 'OrderQueryService' 가 되겠다. INDEX는 사진상에서 0이되겠지? 굉장히..
오늘은 트랜잭션에 대해 정리해보자 왜 정리하려는건데? 며칠 전 면접을 볼 때 면접관님께서 내 프로젝트에 관한 질문을 하셨다. "왜 비즈니스 로직을 컨트롤러에 담으셨어요?" (만약 취업을 위해 국비지원 학원을 알아보시는 분들 꼭 잘 조사하고 가세요... 강사한테 지식 잘못 배우면 향후 여파가 커집니다!) 젠장... 학원 수료하고 따로 스프링에 대해서 공부했는데 비즈니스 로직은 @Service에 작성하는게 맞더라... "그렇다면 트랜잭션으로 로직을 처리할 때 장단점이 뭐가 있을까요?" 고딩좌 킹범짱 : "단점은 아무래도 잘못된 로직이 있을 경우에는 데이터베이스에 반영되지 않습니다!"(아주 자신있게) "그건 장점아닌가요??" 꿀먹은 고딩좌 킹범짱 : ......(정식 면접이 끝난 후 질문했다.) @Transa..