🧑💻 완전 탐색
멀티잇 코딩테스트 러닝클래스'Python 5월반
제곱 암호
암호를 풀어내는 문제
알파벳, 숫자 순서로 짝을 이뤄서 입력이 주어진다
- 숫자를 제곱하고, 앞에 알파벳을 제곱번째의 알파벳을 출력하는 것이다
ord와 chr를 사용했다
- 알파벳을 숫자로 반환하기 위해서 ord를 사용
- 소문자 같은 경우 a = 97 ~ z = 122
- 122를 넘어갈 경우를 대비해서
(int(code[i]) ** 2) % 26
를 해주었다- 그리고 한번 더 122를 넘어가면 26을 뺐다
- 마지막으로 숫자를 문자로 반환하기 위해 chr를 사용
N = int(input())
code = list(input())
answer = ''
for i in range(N):
if i % 2 == 0:
temp = code[i]
else:
decode = ord(temp) + ((int(code[i]) ** 2) % 26)
if decode > 122:
decode -= 26
answer += chr(decode)
print(answer)
개미와 진딧물
정사각형이 주어지고, 안에 개미와 진딧물의 위치가 주어진다
몇 마리의 개미가, 수액을 공급 받을 수 있는지 찾는 것이다
처음에는 진딧물의 위치에 따라 몇 마리의 개미가 수액을 공급 받을 수 있을지에 대한 코드를 짰다
- 정답 코드와 접근은 같지만, 생각을 잘 못 했다
개미의 수는 정해져 있어, 정해진 개미의 수에서 차감을 해야 한다
- 그렇게 안 하고, 위와 같이 하면, 실제로 정사각형에 위치한 개미의 수보다 답이 더 많게 나올 수 있다
N, M = map(int, input().split())
ant = []
sap = []
field = []
for _ in range(N):
field.append(list(map(int, input().split())))
for i in range(N):
for j in range(N):
if field[i][j] == 2:
sap.append((i, j))
elif field[i][j] == 1:
ant.append((i, j))
answer = len(ant)
for x1, y1 in ant:
min_dist = 100 ** 2
for x2, y2 in sap:
dist = abs(x1 - x2) + abs(y1 - y2)
min_dist = min(dist, min_dist)
# 최소 거리가 M보다 크다는 것은, 해당 진딧물에는 어느 개미도 수액을 공급 받지 못 하는 것이다
# 반대로 M보다 작거나 같다는 것은, 개미가 수액을 공급받을 수 있다는 것!
if min_dist > M:
answer -= 1
print(answer)
수 이어 붙이기
숫자들이 리스트로 주어진다
- 모든 숫자들을 합쳐서 최소 숫자를 출력하는 것이다
- 여기서 같은 숫자가 겹치면, 하나의 숫자로 만들 수 있다
- 예) [77, 76] => 776
- 여기서 77 이란 숫자를 7로 만들 수는 없다
- 예) [12, 34, 56, 67, 89] => 123456789
from itertools import permutations
N = int(input())
nums = list(map(int, input().split()))
min_num = 1e18
for i in permutations(nums, N):
num_list = list(map(str, list(i)))
for index in range(1, N):
if num_list[index - 1][-1] == num_list[index][0]:
num_list[index] = num_list[index][1:]
min_num = min(min_num, int(''.join(num_list)))
print(min_num)
'알고리즘 > 알고리즘 설명' 카테고리의 다른 글
그리디 알고리즘, 원인과 결과 찾기 (0) | 2023.05.23 |
---|---|
기초 자료구조의 구현과 응용 (0) | 2023.05.22 |
시뮬레이션과 창의적 해결 (2) | 2023.05.09 |
기초 수학과 구현 (0) | 2023.05.05 |
기초 문자열 구현 (0) | 2023.05.04 |