본문 바로가기

전체 글154

항해 99 16일차 TIL( 광물캐기 / 프로그래머스) 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 사고과정 문제를 요약하자면 최소한의 피로도로 최대한 광물을 캐는 것이다. 광물 캐는 규칙을 세워보겠다. 돌은 어느 곡갱이로 캐든 피로도가 1로 똑같다. 그러므로 가장 성능이 안 좋은 곡갱이를 우선순위로 사용해야 한다. 돌을 캘 때는 다이아몬드 < 철 < 돌 곡갱이로 우선순위를 돌 것 다이아 몬드를 캘 때는 돌 < 철 < 다이아몬드 철을 캘 때는 돌 < 다이아몬드 < 철 하나의 곡갱이를 선택하면 무조건 연속으로 5개 캐야한다. 1번째 시도 끝나는 상황이 두 개로 나누어진다 1. 곡갱이가 부족한 상황 2. .. 2024. 4. 13.
항해 99 15일차 TIL ( 뒤에 있는 큰 수 찾기 / 프로그래머스) 문제 [프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr](https://school.programmers.co.kr/learn/courses/30/lessons/154539) o(n2)으로 탐색하면 쉬운 문제이지만 numbers의 길이가 1,000,000이다. 시간초과에서 걸릴 것 같아 좋은 방법을 생각해야 한다. 일단 o(n2)로 코드 구현해보자 1 번째 시도 import java.util.*; class Solution { public int[] solution(int[] numbers) { int n = numbers.length; int[] arr .. 2024. 4. 12.
HTTP 메소드 PUT, FATCH 차이점(멱등성) POST 메소드로 정순원이라는 이름1을 가진 학생을 생성하기 위에 아래와 같이 요청하면, 고유 구분값인 id를 1로 설정되어 이름1 학생이 생성된다. HttpRequest POST /student { “name”: “이름1”, “grade”: 1 } HttpResponse HTTP/1.1 200 OK { “id”: 1, “name”: “이름1”, “grade”: 1 } 그러면 이제, PUT을 통해 이름1의 grade를 2를 변경해보자. PUT은 리소스에 대한 수정이므로 특정 리소스를 구분하는 id값을 넣어줘야 한다. HttpRequest PUT /student/1 { “grade”: 2 } HttpResponse HTTP/1.1 200 OK { “id”: 1, “name”: “뽀로로”, “grade”: .. 2024. 4. 11.
항해 99 14일차 TIL( 이진 변환 / 프로그래머스 ) 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1 번째 시도 입력받은 문자열이 1이 될 때까지 while 반복문을 돌린다. 입력받은 문자열에 있는 0을 ""으로 바꿔서 text 변수에 저장한다. 입력받은 문자열의 길이에서 text의 길이를 빼서 0의 개수를 센다. text의 길이를 이진수로 바꿔서 binary 변수에 저장한다. 한 번 반복문이 돌 때마다 count를 1씩 늘려준다. 반복문이 다 돌고 난 후의 count와 zero를 배열에 담아 return 한다. 진수변환 함수 int decimal = 10; String binary = Integer.. 2024. 4. 10.
항해 99 13일차 TIL( 덧칠하기 / 프로그래머스) 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1 번째 시도 알고리즘 설명 칠해야 하는 벽에 위치를 unpainting[] 배열에 저장. 1m씩 전진하며 페인팅 해야하는지 확인 true라면 페인팅 하고 롤러크기 만큼 다음 인덱스들 false 해주기 import java.util.*; class Solution { public int solution(int n, int m, int[] section) { int result =0; boolean[] unpainting = new boolean[n]; for(int s : section) { unpain.. 2024. 4. 9.
Id로 연관관계 짓기(엔티티로 연관관계x) @Data @Entity @NoArgsConstructor public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; public Member(Long id) { this.id = id; } public Member(String name) { this.name = name; } } @Data @Entity @NoArgsConstructor public class Team { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne @JoinColumn(name = ".. 2024. 4. 9.
항해 99일차 12일차 TIL(문자열 내 마음대로 정렬하기/ 프로그래머스) 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1 번째 시도 위 문제는 문자열을 정렬할 수 있냐는 묻는 직관적인 문제다. 다만 아주 조금 어려운점이 있다면 String 내에 특정 문자까지들끼리도 비교해야 한다는 것이다. Arrays.sort()는 시간복잡도가 O(nlogn)이다. 절반을 다시 나누는 과정이 로그 시간(logn)에 해당하며, 각 단계에서 모든 원소에 대해 정렬을 수행하는 데 선형 시간(n)이 소요되므로, 전체 시간 복잡도는 O(nlogn)이 됩니다. import java.util.*; class Solution { public Stri.. 2024. 4. 8.
(나만을 위한)댓글 생성 메소드 테스트 구현 고민과정 @Transactional public Long createPostComment(Long postId, Long userId, PostCommentRequest createDTO) { PostComment postComment = buildPostComment(userId, postId, createDTO); if (createDTO.getParentCommentId() != null) { // 대댓글일시 PostComment parentComment = postCommentRepository.findById(createDTO.getParentCommentId()) .orElseThrow(() -> new CustomException(HttpStatus.NOT_FOUND, ResultCode.POST_C.. 2024. 4. 7.
테스트코드 작성시 유념사항 Repoistory -> Service -> Controller 순으로 개발한다. 다른 계층에 대한 의존성이 거의 없기 때문에 접근 방법 가짜로 구현하기: 최대한 빨리 테스트를 통과하기 위해 정답이 아닌 가짜 정답을 구현하는 방법 삼각측량법: 값이 다른 여러 테스트를 작성하고, 이를 일반화하여 정답을 구현하는 방법 명백하게 구현하기: 정답을 바로 구현하는 방법 테스트를 위해 구현 설계가 변경될 수 있다. 테스트 코드는 구현의 보조 수단이 절대 아니다. 항상 같은 결과가 반환되는 함(순수함수) 가 테스트하기 좋은 코드 나쁜 테스트 코드 제어할 수 없는 값에 의존하는 경우, Random(), new Date() (LocalDate.now()) 와 같이 실행할때마다 결과가 다른 함수에 의존하는 경우 외부에 영.. 2024. 4. 7.