백준 2675 : B라는 문자열의 [I번째]를 * 3하면 저절로 해당 숫자가 3배로 PRINT되어 나옴 . 즉
INT와 문자열의 곱셈이 가능함에 유의하자.
백준 2908 : 숫자를 아예 뒤집는법
\
-> 특정 내용은 없으며, 뒤에서부터 처음까지 뒤집는 의미가 존재한다 X[::-1]을 기억하자
백준 1157
index 함수의 사용법 . a라는 list에서 a.index(3)
중복이 없는 문자열 생성법
특정 LIST에서, 일정한 조건 EX) MAX값을 가지는 INDEX의 수가 2개 이상일때 를 표현하는 법
12-26 브론즈 2 달성. 2단승급도 되는구나
백준 2941
문자열 s.replace(‘바꿀문자열부분’,‘변경후문자열부분’)
x = input()
cro_al = ['c=','c-','dz=','d-','lj','nj','s=','z=']
for i in cro_al:
x = x.replace(i, 'a')
print(len(x))
*잠깐, 하나은행 준비때 준비했던 코딩테스트들
a의 3승 ->a**3
int(문자) -> int로 가볍게 변경 , -int = 음수로 변경. int숫자는 , 1234든 뭐든 다 바꾸고, 자연스럽게 음수도 알아서 변경한다.
len(s문자열) : 문자열의 길이 (마지막 index보다 하나 큼 주의)
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers_desc = sorted(numbers, reverse=True) //매우 중요할 듯.
reverse가 내림, 오름 차순 결정
배열 전체 int ->그냥 그 숫자가 나옴 . 1,2,3,4,5 ->12345
sum(intarray)가능.
bool시 !말고 not ex)if not bool배열[i] 쓴다.
x[ x-1 : x+1 ] ->xー1~x까지
문자열은 문자열끼리 더할 수 있다 “ + a =>"a”.
gcd (1,6) 최대 공약수 아렬줌.
[‘A’,‘B’,‘C’] == ‘ABC’
(j+n) % len(answerarr)
j에서 n만큼 더간 후 , 배열 길이 넘으면 처음으로 돌아가는 코드
x = 42 # 첫 번째 변수 x에 어떤 값을 할당
y = "Hello" # 두 번째 변수 y에 어떤 값을 할당
print("김서방은 변수{}와 {}에 있다".format(x, y))
def solution(strings, n):
return sorted(strings, key=lambda x: (x[n], x))
조건에 따라 sorted(strings,key = 조건)
ARRAY.upper()가능./ lower()도..
sorted(array,revers,key = )or
array.sort() 둘다 사용.
소인수 분해를 이용하는 방법
N을 소인수분해하여 각 소수의 지수를 구한 후, 각 지수에 1을 더한 값들을 곱한 후 1을 더하여 약수의 개수를 구합니다.
for x in range(3, n + 1, 2): # 홀수만 확인
isitsosu = True
sqrt_x = int(x**0.5) + 1
for y in range(3, sqrt_x, 2): # 홀수만 확인
if x % y == 0:
isitsosu = False
break
백준 1316번. .
너무 어렵게 생각한 나머지 코드가 길어졌고, 꼬였다.
이게 정답코드. 그냥 내 앞에 있는 배열중에 나랑 내앞이 같다면 다시,
이를 if절로 제외했으니 나머지애들중에서 있다면 -1을 하면 되는 간단한 코드였다.
백준 10798번
answer = answer.replace(' ' , '')
2가질 알았는데, 1. ' ' 는 빈 열 ''는 없음. 2. replace시 다시 받아줘야한다.
백준 2563번
2차원 배열 생성법. [ [] ] 가운데가 각 행씩 열만큼 쌓인다고 한다면 ,
작동구조 -> 1. [0]행렬을 100번 만든다. 2. 그것을 100번 반복한다(열로)
또한.. Count를 아주 유용하게 써왔었는데 , 이 count는 1차원 배열에서만 사용 가능하다.
sum도 마찬가지임에 주의하자
백준 1193번 -> 다른건 다 괜찮은데, 수학문제를 풀면 그 주어진 조건에 따라 어떤 규칙이 있는지를 확인하자 .
백준 2869 ->
최대 O(V)의 코드로 생각했는데.. 역시나 시간초과가 떳다. V의 범위를 잘못본것이 패착이었다.
rawA, rawB, rawV = input().split()
A = int(rawA)
B = int(rawB)
V = int(rawV)
remainder = (V - B) % (A - B)
day = (V - B) // (A - B) + (1 if remainder != 0 else 0)
print(day)
하루에 A만큼 가고 ,B만큼 떨어지기 때문에 해당 코드로 간단하게 구현이 가능하다.
더욱 효과적으로 구현했다.
다른게 문제가아니고..수학이 정말 약하다.
input.split()한걸 list로 만들 수있고,
list.replace(" ", "")로 띄어쓰기 제거 가능
문자열에서 원하는 값을 제외하는 것은, replace를 사용한다.
STRA.replace("0',"")처럼.
이 코드는, 2진수를 10진수로 변경하는 코드 .
1. c를 2로 나눈 나머지를 문자열의 앞으로 오게 한다.
2. 2로 나눈 몫이 다음 c가 된다.
3. c가 1이 되었을때, 한번더 나누면 나머지가 1, 몫이 0이 된다. 이때 루프를 탈출하게한다.
(c가 1일때 바로 탈출하면 안된다. 왜냐하면 그때의 나머지 값이 들어가지 않기 때문)
소수 쉽게 구하기
for j in range(2,int(teni**(0.5)+1)) :
제곱근 앞 뒤로는, 결국 같은 일을 반복하기 때문에 제곱근을 대상으로 검사하면 시간 초과를 방지할 수 있다.
두 list간 중복 수 빼기
a1 = set(lista) , a2 = set(listb) 하고, list(a2-a1)을 하여 제거한다.
dict value에 따라 정렬하기
sortanswer = sorted(answerdict.items(), key = lambda x: x[1], reverse=True)
item는{(1,100),(2,23230).. }가 된다.
구현인지 아닌지의 기준
o(n)이 1억일때를 기준으로 잡자.
또한, 함수마다의 시간 복잡도에도 주의하자.
10진수로 매우 간단하게 구현하기
bin(n) -> O(logn)
다만 , 문자열로 나오기 떄문에 bin(n).count('1')등이 가능함에 주의하자 .
key정렬
for i in range(len(tangerine)) :
if tangerine[i] not in countdict.keys() :
countdict[tangerine[i]] = 1
else:
countdict[tangerine[i]] +=1
tangerine.sort(key = lambda x : countdict[x])
이렇게 생각하자. list.sort(key= lambda x : y)
1. list의 각 원소 값-> x들이 저 y로 바뀐다.
2. 그 순서에 따라 정렬된다 (key 함수)
3. 그 후에 원래대로 돌아온다.
'코딩테스트' 카테고리의 다른 글
SET, MAP (0) | 2024.01.07 |
---|---|
정렬 (1) | 2024.01.01 |
BRUTE FORCE (0) | 2023.12.31 |
일반 식의 알고리즘 (0) | 2023.12.30 |
백준 코딩테스트 - 알고리즘 전까지 (1) | 2023.12.21 |