BOJ88 ★Binary Search Intermediate I - 9 Solved★ 👩🏼🔬 binary-search의 핵심은 탐색 범위를 줄여, 원하는 target을 찾는 시간 복잡도를 $O(logN)$으로 줄인다는 데 있다. 👩🏼🔬 binary-search 간략 요약① 주어진 array, 찾고자 하는 target, 시작 start와 끝 end - 4개가 주어진다.② start와 end의 중간점 mid를 구한다(짝수이면 소수점 절사)③ mid가 가리키는 값이 target이면 끝! target보다 크다면 end를 mid-1로, target보다 작다면 start를 mid+1로 설정★ 13777 Hunt The Rabbit ★※ binary-search 유일 Bronze 문제이지만 Intermediate 포스팅에 넣음 ※ def binary_search(n,l,start,end.. BOJ/🥈 2022. 12. 7. ★Greedy Intermediate I - 20 Solved★ 🧍♂️ greedy 중급문제는 전형적인 greedy 대표 예제 모음이라고 생각하면 쉽다! greedy 유형은 주어진 상황에서 다양한 선택지가 있을 때 당장의 최적의 선택지를 구한 결과를 연속할 때 그 결과가 곧 최적의 결과가 된다는 내용이다. 이 때 중요한 건, 나올 수 있는 모든 상황을 정해 놓고, 그 상황에서 최적의 상황을 연속해서 구한 상황의 결과 모음이 곧 전체의 최적 상황이어야 한다는 전제가 깔려 있다. ★ 6752 Time on task ★ T = int(input()) C = int(input()) times = [int(input()) for _ in range(C)] n = 0 times.sort() for time in times: T -= time if T < 0: break n +.. BOJ/🥈 2022. 12. 5. ★Greedy Upper-Beginner I - 9 Solved★ ★ 10162 전자레인지 ★ T=int(input())a=T//300flag=0for i in range(a,-1,-1): after_A=T-i*300 b=after_A//60 for j in range(b,-1,-1): after_B=after_A-j*60 if after_B%10==0: flag+=1 k=after_B//10 print(i,j,k) break if flag==1: breakif flag==0:print(-1) 🍇 greedy 관점 분석: 개별 상황) A / B / C 버튼을 누르는 상황: 종합 상황) A / B / C 버튼을 여러 번 눌러 T ti.. BOJ/🥉 2022. 12. 2. ★Implementation&Simulation Intermediate I - 20 Solved★ ★ 2941 크로아티아 알파벳 ★ s=input()for c in ['c=','c-','dz=','d-','lj','nj','s=','z=']: if c in s:s=s.replace(c,'*')print(len(s)) 🌳 replace()★ 1316 그룹 단어 체커 ★ import sysinput=sys.stdin.readlinet=0for _ in range(int(input())): s=input() f=0 for i in range(1,len(s)): if s[i]!=s[i-1]: if s[i] in s[:i]: f+=1 break if f==0:t+=1print(t)★ 1213 팰린.. BOJ/🥈 2022. 11. 28. ★Math & Geometry Intermediate I - 13 Solved★ ★ 1676 팩토리얼 0의 개수 ★ 🧘🏼♂️ 뒤에서부터 거꾸로 일일이 0의 개수를 문제대로 찾는 brute-forceN = int(input())fac = 1for i in range(N, 0, -1): fac *= icnt = 0for num in str(fac)[::-1]: if num == '0': cnt += 1 else: breakprint(cnt) 🧘🏼♂️ 그러나, 수학적으로 접근해서 brute-force가 아닌 수학 풀이로 시간을 더 단축하자면, 🧘🏼♂️ 팩토리얼 결과 끝의 0의 개수 → 10으로 나누어지는 횟수의 개수 → 5와 2의 개수 → 5의 개수① 10으로 나누어떨어진다면 끝에 0이 1개, 100으로 나누어떨어진다면 끝에 .. BOJ/🥈 2022. 11. 22. ★BF Intermediate I - 14 Solved★ ★ 1436 영화감독 숌 ★ N = int(input()) cnt = 0 start = 666 while 1: if '666' in str(start): cnt += 1 if N == cnt: print(start) break start+=1 else: start+=1 🧕🏼 말 그대로 brutal하게 일일이 모든 경우의 수에서 666 포함 여부를 따지는 문제 → 최소한의 시간 단축을 위해 break를 넣었고, 666부터 시작하게 코드 설정 🧕🏼 위의 풀이는 ①cnt 변수를 따로 만들어 1부터 추가하며 체크하는 구조이나, 아래의 풀이는 ②N 자체에서 1씩 감소하며 체크하는 구조 ※ while N 풀이가 신박해서 가져왔음 ※ N = int(input()) cnt = 0 start = 665 while N: .. BOJ/🥈 2022. 11. 21. ★Sorting Intermediate I - 18 Solved★ ★ 1181 단어 정렬 ★ import sysinput = sys.stdin.readlinew = set()for _ in range(int(input())): w.add(input().rstrip())w = list(w)w.sort()w.sort(key=len)#words.sort(key=lambda x:len(x))print('\n'.join(w))#for word in words:# print(word) 🚀 ① 같은 단어 한 번만 출력 - 중복 x - set() 사용② 사전 순 정렬, 짧은 것부터 정렬 - sort() 사용 🚀 ① set() 사용한 뒤, add method를 사용해 중복이 배제된 단어 set() 생성※ 먼저 길이 짧은 것부터 정렬하고, 사전 순 정렬이므로, A → B .. BOJ/🥈 2022. 11. 20. ★Math Beginner III - 30 Solved★ ★ 9366 삼각형 분류 ★ for i in range(int(input())): a,b,c=map(int,input().split()) l = [a,b,c] l.sort() s = set(l) if l[2] < (l[0]+l[1]): if len(s) == 1: print(f'Case #{i+1}: equilateral') elif len(s) == 2: print(f'Case #{i+1}: isosceles') elif len(s) == 3: print(f'Case #{i+1}: scalene') else: print(f'Case #{i+1}: invalid!') 🤴 set()이라는 연산자를 통해서 set() 결과의 길이에 따라 삼각형을 분류! 삼각형의 결정조건: 제일 긴 길이 < (나머지 두 변 길.. BOJ/🥉 2022. 11. 18. ★Sorting Upper-Beginner I - 8 Solved★ ★ 10989 수 정렬하기 3 ★ import sysinput = sys.stdin.readlineN = int(input())l = [0]*10000for _ in range(N): n = int(input()) l[n-1] += 1cnt = 0for x in l: cnt += 1 if x != 0: for _ in range(x): print(cnt) 👯♂️ 메모리 8MB, 시간 제한 5초로 메모리 & 시간 모두 신경써야 한다 ① 최대 천만 개의 수를 입력받아야 하므로 대량의 입출력 → 빠른 입출력 해결 - sys.stdin.readline 사용 ② 입력되는 수의 크기가 10,000보다 작거나 같다 → 총 10,000개의 원소가 담긴 자연수별 .. BOJ/🥉 2022. 11. 14. ★hashing 상급 - 1문제()★ 🥂 hash 정리 포스팅 https://sh-avid-learner.tistory.com/194 🥂 hashing 개념 자체가 고난이도로 상급 이상의 난이도 문제로 많이 구성되어 있다. hashing 기초부터 상급 문제까지 모두 아울러 문제를 풀어보자 ★ 15829 Hashing ★ 🥂 최대한 충돌이 적게 일어나게끔 만든 hash function 구현 유형 → 1) 영어소문자문자열에서 (a부터 시작하는 0번 ~) 31의 알파벳 번호 지수승 → 2) input 길이가 증가할 때마다 0부터 커지는 정수 → 1)과 2)를 곱한 누적합에 1234567891을 나눈 나머지 input() key = input() alphas = 'abcdefghijklmnopqrstuvwxyz' i,ans=0,0 for l in .. BOJ/🥇 2022. 11. 6. ★Implementation&Simulation Upper-Beginner I - 25 Solved★ * 2차원 배열 초기화 implementation 주의점 🙋🏻♂️ 2차원 배열 표현은 아래와 같이 이중 list의 형태로 표현할 수 있다: m행 n열 배열의 표현 (모든 원소 0으로 초기화)lst = [[0]*n for _ in range(m)] 🙋🏻♂️ 여기서 중요한 건, 2차원 배열 초기화할 때, 아래와 같은 코드로 작성해서는 절대 안됨lst = [[0]*n]*n ★ (매우 중요) 위와 같이 초기화해서는 안된다. n개의 [0]*n이 모두 같은 객체로 인식되기 때문. 즉 2차원 배열 안에 배열들을 선언하는 게 아니라 각각의 배열들을 선언. 따라서 2차원 배열에 값을 넣으면 모든 배열에 동시에 값이 바뀌게 된다! ★★ 21665 Миша и негатив ★ m,n=map(int,input().. BOJ/🥉 2022. 11. 3. ★Implementation Beginner III - 40 Solved★ ★ 1267 핸드폰 요금 ★ N=int(input())l=list(map(int,input().split()))Y,M=0,0for time in l: Y+=10 M+=15 if time>=30: Y+=(time//30)*10 if time>=60: M+=(time//60)*15print(f'Y {Y}' if YM else f'Y M {Y}') 🍸 시간 간격에 따라 두 요금제의 각 요금을 계속 부과하면 됨★ 27294 몇개고? ★ T,S=map(int,input().split())if S==1 or T=17:print(280)else: print(320)★ 27328 三方比較 (Three-Way Comparison) ★ A=int(input())B=int(i.. BOJ/🥉 2022. 10. 28. 이전 1 ··· 3 4 5 6 7 8 다음