일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- API
- spring security
- 코딩테스트
- java
- 알고리즘
- 최단경로
- 문자열
- brute force
- Greedy
- algorithm
- HTTP
- beandefinitionstoreexception
- 라이브템플릿
- Dijkstra
- springboot
- 2018 KAKAO BLIND RECRUITMENT
- error
- 소수
- 백준
- javascript
- codility
- applicationeventpublisher
- BFS
- 탐욕법
- Spring
- Python
- 2981
- counting elements
- 프로그래머스
- 파이썬
- Today
- Total
목록알고리즘 (13)
Altiora Petamus
11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 🤔생각해보기 파이썬의 정렬은 람다를 사용할 수 있다. 다중 조건일 경우 튜플로 넣어주면 되므로 아주 간단하게 해결할 수 있다. 성공 코드 N = int(input()) position = sorted([tuple(map(int, input().split())) for _ in range(N)], key=lambda x: (x[0], x[1])) for pos in position: print(*pos) 갑자기 ..
Reference 프로그래머스 문제 풀이 제시된 규칙에 맞게 단계별로 풀어나가면 된다. 처음 생각난 것은 정규식을 활용하여 푸는 방법이지만 정규식은 왠지 사용하려고하면 기억이 나질 않는다(...) 기본 new_id의 모든 대문자를 대응되는 소문자로 치환합니다. ⇒ lower() 를 사용하면 간단 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다. ⇒ isalnum() 과 활용 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다. ⇒ 반복문을 돌면서 '..' 를 '.' 으로 replace new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다. new_id가 빈 문자열이라면, new_id에 "a" 를 ..
Reference 백준 10250번 문제풀이 처음 문제로 보이는 그림을 보면 2차원 배열을 사용해서 푸는걸까라는 생각이 들기 쉽다. 물론 2차원 배열로도 풀 수 있지만, 훨씬 쉬운 방법을 통해 풀 수 있다. 문제를 잘 읽어보면 6층 호텔의 10번째 손님은 4층의 객실에 배정된다. 만약 14번째 손님이라면? 2층에 배정된다. 즉 N / H 의 나머지값이 배정받을 객실의 층 수가 된다. 비슷한 로직으로 객실의 번호는 몫 + 1이 된다. 그렇다면 나머지가 0일 경우엔 어떻게 해야할까? 6번째 손님의 경우 601호에 배정되야 하지만, 나머지가 0이므로 층수를 알 수가 없어진다. 12번째 손님도 마찬가지이다. 나머지가 0일 경우 호텔의 층 수가 배정받을 객실의 층 수가 된다. 객실 번호는 몫이 된다. T = in..
Reference 백준 2869번 문제 풀이 이 문제를 푸는데 있어 중요한 키워드는 다음과 같다. 매일 올라가고 (+) 미끄러지고 (-) 목표 높이까지 (조건문 and 반복문) 이 점에 착안하여 현재 위치를 저장할 변수와 날짜를 카운트할 변수를 선언, 초기화해주고 최종적으로 카운트를 출력해주면 해결할 수 있다. A, B, V = map(int, input().split(" ")) position = 0 dayCount = 0 while position = V: break position -= B print(dayCount) 하지만 이런 단순한 풀이로는 시간복잡도를 통과할 수 없다. 언제나 그렇듯... 예제 입력 100 99..
Reference 백준 1193번 문제풀이 대각방향으로 1, 2, 3, 4, 5개만큼 새로운 분수가 생성된다 ⇒ 14는 10과 15의 사이에 있으므로 14번째 분수는 5열 중 어느 한 곳에 있다. 홀짝을 사용하여 차례를 알 수 있다. 5열은 홀수번째이며, 분모가 1부터 시작해서 1씩 증가한다. 분자는 반대. 위 내용을 코드로 작성한다면 아래와 같이 작성할 수 있다. X = int(input()) totalLine = 0 temp = 0 while X > totalLine: temp += 1 totalLine += temp a = 1 b = temp n = totalLine - X if b % 2 != 0: print(f'{a + n}/{b - n}') else: print(f'{b - n}/{a + n}..
백준 4796번 문제 등산가 김강산은 가족들과 함께 캠핑을 떠났다. 하지만, 캠핑장에는 다음과 같은 경고문이 쓰여 있었다. 캠핑장은 연속하는 20일 중 10일동안만 사용할 수 있습니다. 강산이는 이제 막 28일 휴가를 시작했다. 이번 휴가 기간 동안 강산이는 캠핑장을 며칠동안 사용할 수 있을까? 강산이는 조금 더 일반화해서 문제를 풀려고 한다. 캠핑장을 연속하는 P일 중, L일동안만 사용할 수 있다. 강산이는 이제 막 V일짜리 휴가를 시작했다. 강산이가 캠핑장을 최대 며칠동안 사용할 수 있을까? (1 < L < P < V) 입력 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 ..
백준 1339번 문제 민식이는 수학학원에서 단어 수학 문제를 푸는 숙제를 받았다. 단어 수학 문제는 N개의 단어로 이루어져 있으며, 각 단어는 알파벳 대문자로만 이루어져 있다. 이때, 각 알파벳 대문자를 0부터 9까지의 숫자 중 하나로 바꿔서 N개의 수를 합하는 문제이다. 같은 알파벳은 같은 숫자로 바꿔야 하며, 두 개 이상의 알파벳이 같은 숫자로 바뀌어지면 안 된다. 예를 들어, GCF + ACDEB를 계산한다고 할 때, A = 9, B = 4, C = 8, D = 6, E = 5, F = 3, G = 7로 결정한다면, 두 수의 합은 99437이 되어서 최대가 될 것이다. N개의 단어가 주어졌을 때, 그 수의 합을 최대로 만드는 프로그램을 작성하시오. 입력 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10..
백준 2217번 문제 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다. 각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량을 구해내는 프로그램을 작성하시오. 모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다. 입력 첫째 줄에 정수 N이 주어진다. 다음 N개의 줄에는 각..