단계5 : 문자열
1. BOJ 2908 / print(max(''.join(reversed(n)), ''.join(reversed(m)))) # n=int(n[::-1]) 뒤집기
2. BOJ 5622 / for idx, val in enumerate(dial):
단계6 : 심화 1
1. BOJ 2444 / for i in range(n,0,-1): #역순출력: range(start,end,-1)
2. BOJ 10988
3. BOJ 1157 / cnt = [s.count(i) for i in t] # s=input().lower(), t=set(s)
4. BOJ 2941 / w = w.replace(i,'/')
5. BOJ 1316 / if s[j] in s[j+1:]: #s[j+1:] : j+1부터 마지막까지
단계7 : 2차원 배열
1. BOJ 2738 / for i in range(n): for j in range(m): a[i][j]+b[i][j] #n행m열
2. BOJ 2566
3. BOJ 10798 / for i in range(15): for j in range(5): if i < len(mat[j]): ans += mat[j][i]
4. BOJ 2563 / ans += paper[i].count(1) #x축 기준, x=i일 때, 1의 개수의 총합
단계8 : 일반 수학 1
1. BOJ 2745 / ans += b**i * num.index(n[i]) # int(num, b) <- b진법 숫자num을 10진법으로 변환
2. BOJ 1100 / num = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; ans += num[n%b]; n //= b
3. BOJ 2292 / while n > a: a += 6*k; k += 1 # a = 1; k = 1일때, 등차수열 구하는 반복문
4. BOJ 1193 / ★★★ / loop문
5. BOJ 2869 / d = a-b; h = v-b #d: 하루에 올라갈 수 있는 거리, h:올라가야 할 거리
단계9: 약수, 배수와 소수
1. BOJ 9506 / print(n,'=',' + '.join(str(i) for i in arr)) #출력값 join함수 활용
2. BOJ 1978 / if i % j == 0: if j == i: cnt += 1 break #숫자가 i에 도달하지 못하고 중간에 나누어지면 두번째 for문을 break
3. BOJ 2581 / if cnt == 0: p.append(i) #cnt가 0인 값만 소수
단계10 : 기하: 직사각형과 삼각형
1. BOJ 3009 / if a.count(a[i]) == 1: x = a[i] #원소의 개수 세기 arr.count() : 5 5 7중 1개인 것 선택
2. BOJ 14215 / print(2*(sum((a,b,c))-max(a,b,c))-1)
단계11 : 시간 복잡도
1. BOJ 24265 / 등차수열 합
2. BOJ 24267 / https://dev-mandos.tistory.com/124 https://developer-project.tistory.com/336
3. BOJ 24313
단계12 : 브루트 포스
1. BOJ 2231 / for i in range(1, int(n)+1): m = list(map(int, str(i))) #생성자i가 없더라도 푸는 법
2. BOJ 19532 / np.linalg.inv(x) #x의 역행렬 np.dot(a,b) #행렬의곱(=내적) <- 참고 : https://rfriend.tistory.com/380
3. BOJ 1018 / if (i+j) % 2 == 0: if ori[i][j] != 'w': w += 1 else: b += 1 #4중for문으로 8x8로 자르고, 짝/홀 일때 색 다르게
4. BOJ 2839 / 완탐풀이, DP풀이 같이 확인
단계13 : 정렬
1. BOJ 10989 / for i in range(len(cnt)): for _ in range(cnt[i]): print(i) # <------ 계수정렬 : count[i]의 i 개수 만큼 출력
2. BOJ 11650 / ans.sort(key=lambda x:(x[0], x[1])); for i,j in ans: print(i,j) #sort()함수 내 key=lambda식 / 이중배열 벗기기
2. BOJ 18870 / dic = {s[i]:i for i in range(len(s))}; for i in x: print(dic[i], end=' ') #s[i] : 중복제거한 list값을 key값으로 갖는 dictionary을 선언하고, list의 원소를 dic의 index에 넣는 for문 작성
단계14 : 집합과 맵
1. BOJ 10815 / dic = {n_arr[i]:0 for i in range(n)} #시간초과 시 dict or set으로 변경
2. BOJ 7785 / if state == 'enter': dic[name] = state; elif state == 'leave': del dic[name] #dic[key] = value & del[key]
3. BOJ 1620 / if ans.isdigit():print(dic[int(ans)]); elif ans.isalpha():print(index[ans]) #name = input(); dic[i] = name; index[name] = i <------- dic와 index 두 개의 딕셔너리로 받기
4. BOJ 10816 / dic = {} for i in n_arr: if i in dic: dic[i] += 1 else: dic[i] = 1 #list원소 i가 dic에 있다면, dic[i]값 +1하기
5. BOJ 1269 / a|b a&b a-b a^b a<=b a>=b
6. BOJ 11478 / for i in range(len(s)): for j in range(i,len(s)): set.add(s[i:j+1]) #다른 부분 문자열
단계15 : 약수, 배수와 소수 2
1. BOJ 1934 / def lcm(a,b): return a*b/gcd(a,b) #최소공배수 a*b/gcd(a,b)
2. BOJ 1735 / #기약분수: 분자와 분모의 최대공약수로 나눠주어야
3. BOJ 2485 / cnt = 0; for i in temp: cnt += i//n -1; print(cnt) #temp: 간격 <--- 95%이상 풀었으니까 확신 갖고 풀기
4. BOJ 4134 / for i in range(2,int(a**0.5)+1): if a%i == 0: return False #정수론에서, 임의의 양수 M이 합성수이면 √m 보다 작거나 같은 약수를 가진다.
5. BOJ 4948 / num = [1]*(123456*2+1) #def로 풀면 시간초과 발생 따라서, dp형식으로 풀이
6. BOJ 17103 / ★★ / #1)소수배열 2)for문(i의 배수) 3)i가 소수면 (합-i)도 소수
7. BOJ 13909 / BruteForce처럼 일단 규칙성을 찾아가는 방식으로 문제풀이 할 것
단계16 : 스택, 큐, 덱
1. BOJ 4949 / for _ in range(len(c)//2+1): c = c.replace('()','') c = c.replace('[]','') #괄호 짝 개수만큼 제거 <---- 여기 참고
2. BOJ 12789 / st = [] temp = 1 for i in arr: st.append(i) while st and st[-1]==temp: st.pop() temp += 1
3. BOJ 11866 / q.rotate(-k)와 print('<'+ ', '.join(ans) +'>') #q.rotate(-k): 오른쪽방향 k칸회전 / ""+""은 공백 없음(but "",""는 발생)
4. BOJ 2346 / q = dq(enumerate(map(int, input().split()), start=1)) #dq()안 enumerate()하기 / 원소 +/-별로 나눠 회전
원판에서, 양수가 적혀 있을 경우에는 오른쪽으로 이동 = 시계반대방향으로회전
단계19 : 조합론
1. BOJ 1010 / def fac(x): cnt = 1 for i in range(1, x+1): cnt *= i return cnt #import math math.factorial()로 대체 가능
단계20 : 심화 2
1. BOJ 25192 / if s !='ENTER': if s not in ans: cnt += 1 ans.add(s) #입력값이 ENTER가 아니면서, 집합에 없을때 cnt +1
2. BOJ 26069 / if s1=='CC' or s2=='CC': ans.add(s1) ans.add(s2) if s1 in ans or s2 in ans: ans.add(s1) ans.add(s2) #인덱스보다 변수 여러개
3. BOJ 2108 / ★★ / from collections import Counter as c #c(list).most_common() 혹은 dict() 사용
단계21 : 재귀
1. BOJ 25501 / #팰린드롬, global변수, 재귀(변수 여러개)
2. BOJ 24060 / IndexError: list index out of range??? #병합정렬,
3. BOJ 4779 / #칸토어집합, 재귀활용한 규칙성찾기, 함수호출(def)vs출력(print : 문자열("") 사라짐)
4. BOJ 2447 / def star(n): if n==1: return ['*'] a = star(n//3) for i in a: arr.append(i*3) #n=1일때, return값을 잘 잡아주어야
5. BOJ 11729 / def hanoi(n, s, e): if n==1: print(s,e) else: hanoi(n-1, s, 6-s-e) #하노이탑:1,2,3단계로 나눠서 구분
단계22 : 백트래킹
1.
단계23 : 동적 계획법 1
1.
2. BOJ 1011 / H사 기출(k가 1 or 2) /
단계24 : 누적 합
1.
단계25 : 그리디 알고리즘
1.
단계26 : 분할 정복
1.
단계27 : 이분 탐색
1.
단계28 : 우선순위 큐
1.
단계29 : 동적 계획법 2
1.
단계30 : 스택 2
1.
단계31 : 그래프와 순회
1.
'PS > BOJ : 단계별로 풀어보기' 카테고리의 다른 글
| 백준 [단계별로 풀어보기]: (21단계) "재귀", python (7) | 2024.11.21 |
|---|---|
| 백준 [단계별로 풀어보기]: 200솔 달성 ! (2) | 2024.11.09 |
| 백준 [단계별로 풀어보기]: Gold 5 달성! (1) | 2024.10.10 |
| 백준 [단계별로 풀어보기]: 쉬어가기 (2) | 2024.09.14 |
| 백준 [단계별로 풀어보기]: (20단계) "심화 2", python (1) | 2024.09.11 |