본문 바로가기
알고리즘/알고리즘 설명

완전 탐색

by JayAlex07 2023. 5. 11.

🧑‍💻 완전 탐색

멀티잇 코딩테스트 러닝클래스'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)