import java.util.StringTokenizer;
class Solution {
public String solution(String s) {
StringTokenizer st = new StringTokenizer(s);
String answer = "";
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
while(st.hasMoreElements()) {
int n = Integer.parseInt(st.nextToken());
min = Math.min(min, n);
max = Math.max(max, n);
}
return Integer.toString(min) + " " + Integer.toString(max);
}
}
카카오 서버가 불타고 티스토리도 덩달아 뻗어서 반 강제적으로 알고리즘 공부를 못한 일주일 사이에 Lv1문제가 리필되었습니다. 제논의 역설도 아니고... ㅋㅋ
아무튼 유명한 콜라문제의 속임수 없는 버전입니다. 마지막에 콜라를 한 병 더 살수있다는 꼼수가 막혔음을 유의하세요!
class Solution {
public int solution(int a, int b, int n) {
int answer = 0;
while(n >= a){
int bottle = (n / a) * b;
n = (n % a) + bottle;
answer += bottle;
}
return answer;
}
}
def solution(number):
answer = 0
for i in range(len(number)):
for j in range(i + 1, len(number)):
for k in range(j + 1, len(number)):
if number[i] + number[j] + number[k] == 0:
answer += 1
return answer
슬라이딩 윈도우(혹은 투포인터), 맵 자료구조의 개념을 알면 쉽게 풀 수 있는 문제입니다.
가입한 날로부터 10일간 할인을 받을 수 있는 것을 이용해 1~10일동안 살 수 있는 품목을 카운팅합니다.
만약 2~11일 동안 살 수 있는 품목이 궁금하다면, 10일간을 전부 찾을게 아니라 카운팅한 값에서 1일의 할인상품을 빼주고, 11일의 할인상품을 더해주면 됩니다.
우리가 원하는 상품목록이 있기 때문에 그 상품들만 찾아주면 되고 카운팅과 범위 처리는 예외가 나지 않도록 적당히 잘 해주면 됩니다. (설명이 좀 그런데 정말 적당히 잘 하면 됩니다. ㅋㅋ;;)
def solution(want, number, discount) -> int:
answer = 0
product = {}
idx = 0
for w in want:
product[w] = idx
idx += 1
for i in range(10):
if discount[i] in product:
number[product[discount[i]]] -= 1
for i in range(len(discount)):
if checklist(number):
answer += 1
if discount[i] in product:
number[product[discount[i]]] += 1
if i + 10 < len(discount) and discount[i + 10] in product:
number[product[discount[i + 10]]] -= 1
return answer
def checklist(number) -> bool:
for n in number:
if n > 0:
return False
return True