일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Stack
- 면접복기
- deque
- 그래프 탐색
- DP
- 그리디
- GarbageCollector
- 적정 스레드
- 문제풀이
- 분할정복
- Markdown
- 몬티홀
- 프로세스
- Python
- springboot
- 구현
- 그래프탐색
- 빌더패턴
- github
- 정수론
- 백준
- GC
- BFS
- 회고
- g1gc
- 이진탐색
- Greedy
- 배열 돌리기1
- 브루트포스
- 마크다운
- Today
- Total
목록프로그래밍/문제풀이 (20)
FeelingXD
❓ Problem 🤔 How 어떤경우에 포도주로 최고의 만족감을 얻을수 있을까 Greedy 하게 접근해보자. 😀 구현 로직 우선 탐욕법으로 접근하기위해 포도주가 순서대로 정렬되어있어야한다. 포도주 에서 마실수있는 최고의 포도주를 마신다. 남은 포도주 에서 최저의 만족감을 주는 포도주를 마신다. (이미 최고의 포도주를 마신 뒤이므로 효용은 0이다.) 2->3 을 반복한다. 🍷 최적해를 찾아 탐욕적으로 접근하기 포도주에서는 어떻게 작동할까 우선 포도주에서 마실수있는 최고 효용을 K 라고 했을때 첫잔에서 얻을수있는 최고만족감은 언제나 K이다. 그후 남은 포도주에서 마실수있는 최저의 효용을 얻는다. 이때 얻을수있는 만족 효용은 0이다. 남은 포도주중에서 최고 효용의 포도주를 마신다. 이때 얻을 수 있는 효용은 ..
❓ Problem 🤔 How ❗ Solve SELECT MEMBER_ID -- 아이디 ,MEMBER_NAME -- 이름 ,GENDER -- 성별 ,DATE_FORMAT(DATE_OF_BIRTH,'%Y-%m-%d') AS DATE_OF_BIRTH -- 생년월일 FROM MEMBER_PROFILE WHERE TLNO IS NOT NULL AND MONTH(DATE_OF_BIRTH)='03' AND GENDER = 'W' ORDER BY MEMBER_ID ASC
❓ Problem 🤔 How 이 ❗ Solve # 섬의 개수 import sys from collections import deque input = sys.stdin.readline moves = [(0, 1), (0, -1), (1, 0), (-1, 0), (-1, -1), (1, 1), (-1, 1), (1, -1)] SEA = 0 LAND = 1 CHECKED = 2 def draw_board(row) -> list: return [list(map(int, input().split())) for _ in range(row)] def search_island() -> int: cnt = 0 for y in range(len(board)): for x in range(len(board[0])): if ..
❓ Problem 🤔 How SQL 문제를 풀때마다 알고리즘 풀이문제보다 나름 신경써야할것이많다. 🚧 ORDER BY 정렬시 고려할것 TOTAL_DISTANCE는 CONCAT으로 문제에서요구하는 거리의 단위인 km 문자열이 붙어서 결국 문자열 형태가 되었다 이를 이용해서 정렬할 경우 숫자가 아닌 문자열 기준으로 정렬된다. 🚧 ROUND 어디서 반올림할것인가? 문제에서 총 누계거리는 2번째 자리에서 평균 역 사이 거리는 3번째 자리에서 반올림 한는것이 문제의 설명이다. 그럼 ROUND 함수의 두번째인자에는 무엇이 들어가야할까 ? ROUND 의 두번째 인자는 소숫점 몇째짜리 까지 표시할 것인지에대한 매개변수이다. 즉 문제에서 요구한 두 번째 자리에서 반올림 하시오 -> 소숫점 첫째 자리까지 남기시오 가된다...
❓ Problem 아래와 같이 5와 사칙연산만으로 12를 표현할 수 있습니다. 12 = 5 + 5 + (5 / 5) + (5 / 5) 12 = 55 / 5 + 5 / 5 12 = (55 + 5) / 5 5를 사용한 횟수는 각각 6,5,4 입니다. 그리고 이중 가장 작은 경우는 4입니다. 이처럼 숫자 N과 number가 주어질 때, N과 사칙연산만 사용해서 표현 할 수 있는 방법 중 N 사용횟수의 최솟값을 return 하도록 solution 함수를 작성하세요. 🤔 How DP 카테고리 문제지만 DP를 어떻게 적용해하는지몰라 다른분의 풀이를 참고하여 이해한 문제 (다음에 다시 풀어봐야겠다.) DP테이블의 접근은 숫자를 N번썻을때 어떤수를 만들수 있는가? 이다. 즉 DP[i] 일때 N 을 i 번사용해서 만들수..
❓ Problem 🤔 How 문제이름이 정말 직관적이라고 생각되는 문제 2n * 2n 의 형태의 board 가 주어지고 입력받은 r,c 번째 원소는 언제 방문 하는지 출력하는 문제이다. 수학의 사분면으로 접근하기 수학의 사분면의 기준으로 현재 접근하는 사각형의 한변의 길이가 얼마인지 알수 있다면 모든 칸을 방문하지 않더라도 답을 도출 할 수 있다. 처음 탐색은 (0,0) 부터 탐색한다. if y + l
❓ Problem 🤔 How 여담으로 이러한 쿼드트리 방식은 실제 비디오 압축, 등 여러 압축기술에 사용된다 ! 문제를 보고 딱 분할정복 문제이다 싶었는데 어떻게 구현하는지 살짝 먹먹 했는데 다행이 잘 해결했다. 😅 구현, 분할정복 문제를 익숙하게 할수있도록 연습해야겠다. 수학의 사분면을 이해하고 접목해야한다. 쿼드트리 지문에 0과 1이 섞여 있으면 전체를 한 번에 나타내지를 못하고, 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래, 이렇게 4개의 영상으로 나누어 압축 으로 명시되어 있다. 행열을 탐색하며 처음 글자와 비교했을때 다른글자가 있으면 시작점을 기준으로 4분면을 나누고 작은단위로 쪼개면서 다시 압축여부를 판별해야한다. compression 함수 해당함수는 압축하는 함수임과동시에 재귀적으로 호출..
❓ Problem 문제링크 🤔 How 중요한 포인트는 다음과 같다. 펠린드롬이라면 2 , 유사 펠린드롬이면 1, 둘다 아니라면 0을 반환한다. 유사펠린드롬은 문자 하나를 제거한뒤에 펠린드롬이 되는경우이다. 투포인터를 이용해 펠린드롬을 탐색하는 방법으로 접근했다. 그후 맞지않는 같은 단어가 아닌걸 발견하게 된다면 해당문자를 지우고 펠린드롬인지 확인하는 방법이다. 이때 좌측문자, 우측문자 두개가 있으므로 둘중 하나를 제거하여 펠린드롬 여부를 확인해야하는데 이때는 각단어 자리를 없에서 만든 새로운 문자가 펠린드롬인지 확인해준다. (slicing 을 이용하여 간단하게 새로운 문자열을 만드는 방법을 사용했다.) ❗ Solve # 회문 import sys input = sys.stdin.readline def ch..
❓ Problem 🤔 How 방을 생성하는 조건 방을 순회하여 입장할수 있는 적합 한 방이없을경우 현재플레이어를 방장으로하는 새로운 방을 만든다. 적합한 방의조건 현재 플레이어와 방장의 레벨차가 10 이하인 경우 방이 최대인원수보다 적은경우 갱신 여부를 체크하는 변수를 두어서 현재 플레이어가 입장했을경우 새로운 방을 생성하지않고 적합한 방이없는경우 새로운방을 생성하도록한다. ❗ Solve # 랭킹전 대기열 import sys input = sys.stdin.readline START = "Started!" WAIT = "Waiting!" def print_rooms(rooms): """ 방을 순회하며 출력 플레이어 인원은 닉네임이 사전순으로 앞서는 플레이어를 출력해야함 """ for room in roo..
❓ Problem 🤔 How 기존 이동가능 한 통로(0) 은 항상 0이다 반환해야 할 map 형태는 벽을 깬이후 이동할수있는 거리의 최대값 이다. 각 위치에서 최대 이동거리를 기록한다. 최적화 벽을 깬이후 해당 위치에서 상 하 좌 우 를 탐색하며 갈수있는거리를 구하는건 굉장히 비효율적이다. 이를 위해 미리 캐싱해두는 법이 필요하다. 이제 이를 이동 가능한 통로를 다음과 같이 그룹으로 묶어 줄 수 있다. 위의 그림에서는 연두색이 5칸, 분홍색이 4칸 주황색이 1칸 인 그룹으로 구분 된다. 이를 그룹별로 나누고 그룹의 크기가 얼마나 되는지 표시한 자료구조가 필요하다. 깰벽을 기준으로 상하 좌우 탐색을 하고 (기본값+1 : 깨진벽은 통로가 될수 있으므로) 과 상 하 좌 우를 탐색해서 만날수 있는 통로의 그룹을..
❓ Problem 🤔 How ❗ Solve # 나이트 투어 import sys input =sys.stdin.readline ROWS=COLOUMS=6 visited=[[False]*6 for _ in range(6)] moves=[[2,1],[-2,1],[1,2],[1,-2],[-1,2],[-1,-2],[2,-1],[-2,-1]] # 나이트의 이동 def board_to_pos(word): # 체스보드 위치를 좌표로 변환 x=ord(word[0])-ord('A') y=ROWS-int(word[1]) return (y,x) def validate_move(s_pos,t_pos): # 현재위치와 다음위치 비교 global visited cy,cx=s_pos for dy,dx in moves: ny,nx=c..
❓ Problem 🤔 How N = 스크린에 대한 몰로코의 입찰가 와 , 현재 최고 입찰가 의 갯수가 주어진다. K = 입찰받아야하는 최소 스크린 수 N 개의 줄에 몰로코의 입찰가 , 현재 최고 입찰가가 순으로 주어진다. diff_fee 를 기록한다. 해당 리스트는 입찰가 차이(현재 입찰 최고가-입찰가)를 모아서 보관 한다. diff_fee 를 정렬하면 입찰가 차이가 낮은순서로 정렬되고 diff_fee 의 K번째 원소(입찰가 차이의 K번째 원소)까지 구매할 수 있어야한다. 최소입찰 금액이 음수일 수 없으니 max(0, diff_fee[K-1]) 로 최소가격은 0으로 출력해 주어야 한다. ❗ Solve # 모바일 광고 입찰 import sys input =sys.stdin.readline def solut..