[백준] Sil3 | 큐 | 1021 회전하는 큐 Pythonhttps://www.acmicpc.net/problem/1021 구상유형 : 큐 원형, 양방향 큐 -> deque!!!![문제 해석]가능한 연산 3가지 1. 첫번째 원소 추출 : 인덱스 1번 원소 사라짐 (인덱스 1부터 시작) 2. 왼쪽 회전 : 인덱스값 i+1 3. 오른쪽 회전 : 인덱스값 i-1원소는 주어진 순서대로 뽑아야 함답 : 원하는 원소를 뽑아내기 위한 최소 회전연산 횟수[구상]문제 이해가 잘 안돼서 솔루션 봤는데 원소가 뽑히면 맨 앞에서부터 1로 새로 인덱싱이 되는 거고 뽑아낼 수 있는 건 항상 맨 앞 원소인 것. 설마 진짜로 직접 원소 옮겨주는 건지 생각 안하고 인덱스 갖고 놀거나 큐는 가만있고 포..
전체 글
삼시세끼 잔잔하게 개발하는 프로그래밍 수련기 : Spring boot, Algorithm, Android[백준] Sil3 | 정렬? | 20291 파일정리 Pythonhttps://www.acmicpc.net/problem/20291 구상유형 : 정렬? 파이썬은 다 해주는 걸?...[문제 해석]확장자 별 개수 카운트확장자 개수 출력 시 사전순 정렬sorted(딕셔너리.items()) 일케쓰면 딕셔너리 key값으로 사전순 정렬된 배열 겟 가능~ 트러블 슈팅x 코드# v1 : 정렬? 파이썬은 다 해주는 걸?...# TIP : sorted(딕셔너리.items()) 일케쓰면 딕셔너리 key값으로 사전순 정렬된 배열 겟 가능~'''[문제 해석]- 확장자 별 개수 카운트- 확장자 개수 출력 시 사전순 정렬'''from collections import defaultdictimport sysinput = sys.st..
[백준] Sil4 | 스택? | 10828 스택 Pythonhttps://www.acmicpc.net/problem/10828 구상단순히 스택을 구현하라는 문제그냥 배열써서 구현함... 너무 간단한데 이게 맞나 더 날것으로 만들어야 하나 트러블 슈팅x 코드# v1 : 그냥 배열써서 구현함... 너무 간단한데 이게 맞나 더 날것으로 만들어야 하나# 스택을 구현해랴'''[문제 해석]시간제한 0.5s- 아래 기능들 구현 - push, pop, top, size, empty - 비어있는데 pop, top하면 -1 - empty는 비어있으면 1, 아니면 0'''import sysinput = sys.stdin.readlineN = int(input())com_arr = [list(input()...
[백준] Sil4 | 스택 | 9012 괄호 Pythonhttps://www.acmicpc.net/problem/9012 구상유형 : 스택 전에 풀었던 햄버거 만들기 문제에서 썼던 스택에 쌓아두고 지우기 방식 사용! 트러블 슈팅파이썬은 문자열 마지막꺼 지워야 할 때는 그냥 리스트로 담아서 pop하는 게 쉽다 . . .문자열로 굳이 해보려다가 슬라이싱 한바탕 헤매다 옴(마지막 두글자 삭제하는 부분이, 삭제가 아니라 그거 제외하고 다시 저장하는 식으로 구현해야 해서 잘 안됐음) 코드# v1 : 스택#전에 풀었던 햄버거 만들기 문제에서 썼던 스택에 쌓아두고 지우기 방식 사용!# TS : 문자열 마지막꺼 지워야 할 때는 그냥 리스트로 담아서 pop하는 게 쉽다 . . .import sysinput = sys...
[백준] Gol4 | 조합,스택 | 2800 괄호 제거 Pythonhttps://www.acmicpc.net/problem/2800 크아 쫌 뿌듯했던 문제~~~솔루션 안보고 성공했다!!! 구상[문제 해석]주어진 식의 괄호쌍 포함/미포함 모든 조합 출력괄호는 쌍으로만 포함/미포함 시킴출력은 사전순으로, 중복 없이 구상유형 : 조합, 스택스택으로 괄호쌍 개수 세고, 괄호 위치 저장해둠각 괄호 포함/미포함 조합들을 itertools.combinations()로 조합 생성함. nPr순열 형태로 표현한다면 괄호개수가 4개면 4P0 + 4P1 + 4P2 + 4P3 가 총 조합수가 됨(모두 포함하는 경우인 4P4는 제외)해당 조합에 해당하는 괄호만 포함시켜 출력TIP : 비선형 자료구조 유형에 sorted()를 ..
[백준] Sil2 | 이진탐색 | 18113 그르다 김가놈 Pythonhttps://www.acmicpc.net/problem/18113 구상v1 : 이진탐색 이름이 왜 이런가 했더니..ㅋㅎㅋㅎ 트러블 슈팅TS 1 : 시간초과 -> 이 풀이는 pypy 로 돌려야 풀 수 있다고 함TS 2 : 2% 에서 틀렸습니다 -> mid로 나눗셈 연산을 해야해서 mid가 0이면 안됨. left=1로 시작하고 leftTS 3 : 80%쯤에서 틀렸습니다 -> 이진탐색 if문에서 이번값==목표값 인 경우에도 최적의 정답이 아닐 수 있으므로 바로 break로 탈출하면 안됨. 범위 조절해서 이어서 탐색해줘야 함..(아마도 김밥 남은거 버리고 꼬다리 자르고 뭐 그래서 그런듯...wow 문제에 따라 사용할것) 코드# v1 : ..
[백준] Gol4 | BFS, 이진탐색? | 2412 암벽등반 Pythonhttps://www.acmicpc.net/problem/2412 구상 main idea는 bfs최소경로찾기, 거기에 이진탐색을 쓰면 시간을 더 줄일 수 있음bfs만 써서 풀어봄이게 왜 이진탐색???→ 최소거리 찾는 거 자체는 bfs 해주면 되는데, 간선 데이터가 주어지지 않아서 다음 노드 찾기에 이진탐색을 쓸 수 있음이진탐색 : 홈을 정렬하고, 이진탐색으로 현위치에서 이동 가능한 최소&최대 홈을 구한다. 그 후 정렬된 홈 목록에서 최소&최대 홈 사이의 홈들만 탐색하도록 한다!.→ 이진탐색 안써도 풀리는 문제ㅇㅇ트러블 슈팅시간초과다음 노드를 찾을 때 노드를 모두 확인하는 게 아니라 원하는 숫자 범위 안에 노드가 존재하는지 탐색하..
[백준] Sil2 | 이진탐색 | 2805 나무자르기 Pythonhttps://www.acmicpc.net/problem/2805 구상최적 값 어딘가를 찾기 → 이진탐색~~만만하게 봤다가 오래걸린 문제 ㅎ반례는 찾아봤지만 솔루션 안보고 풀었다! 만세! 트러블 슈팅TS 1 : 클래식해보여도 알고리즘을 외워서 쓰려고 하지 말고 문제에 맞게 말랑하게 생각하거라 . . .TS 2 : 이진탐색 시 양쪽 인덱스가 같은 경우는 문제에 따라 포함여부 달라짐! 문바문 코드# v1 : 이진탐색# 그냥 클래식한 이진탐색으로 구현하면 될 것 같은데?# TS 1 : 클래식해보여도 알고리즘을 외워서 쓰려고 하지 말고 문제에 맞게 말랑하게 생각하거라 . . .# TS 2 : 이진탐색 시 양쪽 인덱스가 같은 경우는 문제에 따라 ..
[백준] Sil2 | 이진탐색 | 2512 예산 Pythonhttps://www.acmicpc.net/problem/2512 구상총예산을 넘기지 않는 선에서 최대가 되는 그 시점! 을 찾아야 함 → 이진탐색내 구상대로 풀어봤는데 테케는 통과하나 채점 시 틀렸습니다가 뜬다질문 게시판의 반례들 찾아보기반례로 고쳐봐도 코드가 다른 분들 코드보다 너무 복잡한게 뭔가 내 논리 자체에 근본적인 문제가 있는 것 같아서 솔루션을 보기로,,결론적으로는 이진탐색을 잘못 활용하고 있었고, 다시 제대로 써서 풀었다. 트러블 슈팅이분탐색 시 left, right 가 꼭 인덱스일 필요는 없다. 찾으려는 값으로 해도 됨.. 그냥 이분탐색 원리 그대로 중간값으로 잡아서 계산해나가면 이분탐색 종료 후 최적의 상한액이 남게 됨ㅎㅎ....
[백준] Sil4 | 이진탐색 | 1789 수들의 합 Pythonhttps://www.acmicpc.net/problem/1789 구상두가지 방법으로 풀이했다.손구상 풀이 (greedy)내가 손구상한 풀이로도 가능했음. 답까지 모든 경우에 조건을 확인해야해서 더 오래걸리지만..이진탐색문제라고 해서 이진탐색으로도 풀었다이진탐색으로 한번 더 풀어보자 트러블 슈팅이분탐색 시 다음 범위는 현재 중간값을 포함하지 않는 범위로 설정해줄 것!숫자 합 계산에 sum(range()) 를 썼더니 시간초과 발생. 1~n까지의 합 = n(n+1)/2 임을 활용하자! 코드 - greedy# v1 : greedy (60ms)# 그리디 / 이진탐색 둘 다로 풀리는 문제# TS : range 범위 경계값에 걸리는 경우 ..
[프로그래머스] LV3 | DP | 코딩 테스트 공부 Pythonhttps://school.programmers.co.kr/learn/courses/30/lessons/118668 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 구상모르겠어서 솔루션 함 읽고 해봄..dp면 점화식이 있겠지. 뒷쪽에 계산해둔 결과를 재사용할거고.점화식 : dp[alp][cop] = min(dp[alp-1][cop]+1, dp[alp][cop-1]+1, 문제를 풀어서 도달시켜둔 값)dp는 과거 계산결과를 사용한다 = 앞에걸 먼저 업데이트해둬도 됨..!!!...!!TS 1 : 인덱싱..
[프로그래머스] LV2 | DP? | 가장 큰 정사각형 Pythonhttps://school.programmers.co.kr/learn/courses/30/lessons/12905 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 구상DP로 어떻게 푼다는 건지 모르겠어서 솔루션 봄인덱스를 처음부터 돌고싶어서 그 방향으로 풀어보려고 고집했는데 인덱스 위치는 내 생각보다 중요함.. DP가 이전의 계산값을 활용하는 개념이니 뒤쪽 값을 사용하는 방향으로 설정하는 게 당연했을지도.. 이것저것 해보기점화식dp테이블에 저장할 값은 정사각형 한 변의 최대 길이이다. (답은 ..
[프로그래머스] LV3 | 구현 | 광고삽입 Pythonhttps://school.programmers.co.kr/learn/courses/30/lessons/72414 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr Think누적합 이라는 개념을 사용하는 문제라고 한다.말그대로 누적한 합인데, 이 개념을 사용하면 쉽게 원하는 구간의 구간합을 구할 수 있다.누적합 계산법 1. 주어진 데이터에서 숫자 변동이 생기는 부분만 +, -로 표시한 배열 만듦 2. +, - 되는 만큼 해당 부분의 현재 값 담은 배열 만듦 3. 현재값 배열로 누적값 ..
상황 MockMvc 를 써서 테스트하려면 403 이 발생하는 이슈를 csrf 토큰을 붙여 보내는 방법으로 해결한다. 근데 이 토큰이 request parameter 로 붙어서 가고, rest docs 사용 시 이 항목이 문서화가 안되었다면서 아래와 같은 에러가 난다 Request parameters with the following names were not documented: [_csrf] 파악 테스트 시 csrf 를 해제하는 방법은 못찾겠다 보내는 방법을 바꿔보았다 해결 이런식으로 csrf 를 request param이 아닌 header 에 들어가도록 설정해주면 에러가 더이상 나지 않는다 //then MockHttpServletRequestBuilder requestPost = post("/api/..
상황 @RequestBody 를 가진 POST 요청에 대해서만 계속 400 응답이 온다 파악 ERROR 가 아닌 WARN 단계로 로그가 찍혀서 계속 못보고 지나쳤는데 잘 봐야 한다.. 에러 메세지 : HttpMessageNotReadableException: JSON parse error: Cannot construct instance of ... Spring 은 요청의 직렬화/역직렬화에 Jackson 이라는 라이브러리를 사용하고, Jackson 은 생성자를 반드시 필요로 한다. 해결 그런데 나는 DTO 클래스에 @Data 와 @Builder 만 달고 사용중이었다. (@Builder 는 생성자를 생성해주지 않음) 직전 프로젝트에서 잘 됐던 코드랑 비교했었는데 그때도 이렇게 잘 썼어서 문제가 없는 줄 알았..