'정올'과 '백준' 을 이용해 코딩 테스트를 준비하려 합니다.
'정올'은 일단 단계별 문제 LC_Python → Beginner 순으로 진행할 것입니다.
초반에 쉬운 문제가 많다 보니 쉬운 문제는 기록하지 않고, 헷갈린 문제이거나, 내가 푼 방식보다 괜찮은 방식이 있다면, 기록 할 예정!
'백준'은 깃허브 algorithm-practice에 풀어야 할 문제를 잘 정리해 주셔서, 이 순서대로 순차적으로 풀어볼 생각입니다. ㅎㅎ
한문제 한문제씩 기록하면서, 좀 더 간편한 방식이 있다면 # best 풀이 # 로 정리할게요!!
1주차 : Array - 1~4번
# 내 풀이
alphabet = input()
a = {}
for i in range(len(alphabet)) :
if int(ord(alphabet[i])-97) in a :
a[int(ord(alphabet[i])-97)] += 1
else :
a[int(ord(alphabet[i])-97)] = 1
for num in range(26) :
if num in a :
print(a[num], end = ' ')
else :
print("0", end = ' ')
# Best 풀이
n = input()
lst = [0]*26
for i in n:
lst[ord(i)-ord('a')] += 1
for i in lst:
print(i, end=' ')
# print(*lst) 로도 가능하다!
----------------------------------------------------------------------------------------------------------------
* (별표, Asterisk)
- Unpacking 기능 : 괄호 안에 있던 데이터들을 풀어 각각으로 출력
- → list, tuple에서 사용 가능하고, dictionary에서 사용 시 ‘키’ 값을 출력한다
data = [1,2,3,4,5]
print(*data)
# 1 2 3 4 5
data = (1,2,3,4,5)
print(*data)
# 1 2 3 4 5
data = {1:'일', 2:'이', 3:'삼',4:'사',5:'오'}
print(*data)
# 1 2 3 4 5
- 변수에 Unpacking 해서 할당
data = [1,2,3,4,5]
a,*b,c = data
print(a,b,c)
# 1 [2, 3, 4] 5
*d,_,_ = data
print(d)
# [1, 2, 3]
*e, = data
print(e)
# [1, 2, 3, 4, 5]
----------------------------------------------------------------------------------------------------------------
# 내 코드
a = int(input())
b = int(input())
c = int(input())
mul = str(a*b*c)
num = [0] * 10
for i in range(len(mul)) :
num[int(mul[i])] += 1
for i in range(len(num)) :
print(num[i])
# Best 코드
a = int(input())
b = int(input())
c = int(input())
num = [0] * 10
mult = str(a*b*c)
for i in range(len(mult )):
num[int(mult[i])] += 1
print(*num, sep='\\n')
----------------------------------------------------------------------------------------------------------------
print(*num, sep='\n')
- * 으로 출력 시, a b c 와 같이 출력 된다
- 한줄씩 쓰고 싶으면 sep = ‘\n’ 를 print에 같이 써주면 된다
----------------------------------------------------------------------------------------------------------------
# 내 코드
num = input()
number_set = [0] * 9
for i in range(len(num)) :
if num[i] == '9':
number_set[6] += 1
else :
number_set[int(num[i])] += 1
if number_set[6] % 2 == 1 :
number_set[6] = number_set[6] // 2 + 1
else :
number_set[6] = number_set[6] // 2
print(sorted(number_set)[-1])
# Best 코드
room_num = int(input())
num_cnt = [0] * 10
for i in str(room_num) :
num_cnt[int(i)] += 1
# float이면 반올림
a = (num_cnt[6] + num_cnt[9] + 1) // 2
num_cnt[6], num_cnt[9] = a, a
print(max(num_cnt))
----------------------------------------------------------------------------------------------------------------
# 내 코드
# 시간 초과
n = int(input())
lst = input().split(" ")
num = int(input())
result = 0
for i in range(n) :
for j in range(i+1,n):
if int(lst[i]) + int(lst[j]) == num :
result += 1
print(result)
# Best 코드
n = int(input())
lst = sorted(list(map(int, input().split())))
num = int(input())
start, end = 0, n - 1
result = 0
while start < end :
temp = lst[start] + lst[end]
if temp > num :
end -= 1
elif temp < num :
start += 1
elif temp == num :
result += 1
start += 1 # 이게 중요함 !
print(result)
----------------------------------------------------------------------------------------------------------------
투 포인터 알고리즘
- 두 가지 포인터를 사용하여, array 에서 원하는 값 찾는 반복문 구현
- 시간 복잡도 : O(n) (내가 쓰던 방식 O(nC2)
- 알고리즘 과정
- array 를 오름차순 정렬
- 두 가지 포인터를 맨 앞과 맨 뒤에 배치
- 두 가지 포인터의 합이 내가 원하는 값이 아닐 시 알맞게 위치 조정
- 내가 원하는 값이 나왔을 시에도 위치 이동을 해야 함, 아니면 while 로 인해, 값이 반복문에 빠지게 된다.
'Python Coding Test' 카테고리의 다른 글
[파이썬 코테] Stack (에디터, 키로거, 요세푸스 문제) (3) | 2024.12.20 |
---|