본문 바로가기

알고리즘107

완전 탐색 🧑‍💻 완전 탐색 멀티잇 코딩테스트 러닝클래스'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.. 2023. 5. 11.
시뮬레이션과 창의적 해결 🧑‍💻 시뮬레이션과 창의적 해결 멀티잇 코딩테스트 러닝클래스'Python 5월반 0 커플 숫자로 된 리스트가 주어진다 리스트 안에 숫자의 개수는 짝수이다 음수와 양수가 들어가 있고, 둘의 합이 0이면 커플이다 그 중 합하면 0이 아닌 숫자를 구해야 한다 딕셔너리로 먼저 해결을 했다 key 로는 숫자의 절대값을 넣었고, value에다가 원래 값을 넣었다 만약 절대값이 같으면 value에 값끼리 더했다 (같은 절대값이 나오면, value는 0이 된다) 그리고 마지막에 모든 value 들을 더했다 짝이 없으면, value는 0이 아니라, 다른 숫자일 것 N = int(input()) score = list(map(int, input().split())) temp_dict = {} for s in score: .. 2023. 5. 9.
기초 수학과 구현 🧑‍💻 기초 수학과 구현 멀티잇 코딩테스트 러닝클래스'Python 5월반 최장 맨해튼 거리 |x1 - x2| + |y1 - y2| 의 값이 최장 맨해튼 거리다 (x1, y1) , (x2, y2) 4개의 숫자가 주어지는데, 그 숫자로 만들 수 있는 제일 긴 맨해튼 거리를 만드는 것이다 permutations을 사용하여 주어진 4개의 숫자로 만들 수 있는 수열을 모두 구한다 그리고 맨해튼 거리 공식을 이용하여, 최장 맨해튼 거리를 구하면 된다 from itertools import permutations numbers = list(map(int, input().split())) answer = 0 for i in permutations(numbers, len(numbers)): answer = max.. 2023. 5. 5.
[Python] 백준 15650 N과 M 2 🧑‍💻 [Python] 백준 15650 N과 M 2 Silver 3 - Backtracking 쉽게 itertools의 combinations를 사용해서 풀 수 있는 문제다 하지만 Backtracking을 공부하고 싶어서 풀었던 문제다 기본적으로 if len(nums) == M: 을 통해서 재귀 함수의 base case를 만든다 안 만들면 무한 루프 리스트 안에 for문을 돌며, 나오는 숫자가 없을 때, 리스트 안에 해당 숫자를 넣고 backtracking(start)를 다시 돈다 여기서 중요한 것은, 수열이 오름차순이어야 한다는 것이다 그래서 재귀함수를 돌릴때마다 backtracking(start + 1)를 해야 한다 그렇게 하면, for문에서 전에서 backtracking() 했던 것보다, 큰 수부터.. 2023. 4. 2.
[Python] 백준 1213 팰린드롬 만들기 🧑‍💻 [Python] 백준 1213 팰린드롬 만들기 Silver 3 - Dictionary 딕셔너리에, 각 알파벳과 알파벳의 개수를 넣는다 key는 알파벳 | value에는 알파벳의 개수 알파벳 개수 중 홀수가 2개 이상이면, 팰린드롬을 만들 수 없다 if sum([al % 2 for al in al_dict.values()]) > 1: 홀수 이면 al % 2 를 할 때 1이 나온다 반대로 짝수면 0이다 즉 팰린드롬이 되려면, 모든 알파벳의 개수가 짝수거나, 개수 하나가 홀 수 일 때에 팰린드롬을 만들 수 있다 for key, value in sorted(al_dict.items()): 을 통해서, 알파벳을 정렬한다 코드 flag = True al_dict = {} alp = input() for a .. 2023. 4. 1.
[Python] 백준 1915 가장 큰 정사각형 🧑‍💻 [Python] 백준 1915 가장 큰 정사각형 Gold 2 - Backtracking 행렬을 순회하면서, 1을 찾게되면, 그 1에 대한 모든 경우의 수를 가지고 최소값을 구하는 것이다 예) 찾은 1을 기준으로 1X1 색종이를 덮을 경우 예) 찾은 1을 기준으로 2X2 색종이를 덮을 경우 예) 찾은 1을 기준으로 3X3 색종이를 덮을 경우 예) 찾은 1을 기준으로 4X4 색종이를 덮을 경우 예) 찾은 1을 기준으로 5X5 색종이를 덮을 경우 56번째 줄이 끝나면, 대부분의 1은 0으로 바껴져 있을 것이다 (만약 한 사이즈의 색종이를 5장을 넘기면, 1로 유지가 될 것이다) 코드 matrix = [list(map(int, input().split())) for _ in range(10)] count.. 2023. 3. 31.
[Python] 백준 1915 가장 큰 정사각형 🧑‍💻 [Python] 백준 1915 가장 큰 정사각형 Gold 4 - DP 인덱스가 벗어나지 않는 선에서, 위, 왼쪽, 외쪽 위의 숫자들 중 min 값을 구한 다음에 1을 더해준다 코드 N, M = map(int, input().split()) matrix = [list(map(int, input())) for _ in range(N)] dp_table = [[0] * M for _ in range(N)] for i in range(N): for j in range(M): if matrix[i][j] == 1: dp_table[i][j] = 1 if 0 2023. 3. 30.
[Python] 백준 2841 외계인의 기타 연주 🧑‍💻 [Python] 백준 2841 외계인의 기타 연주 Silver 1 - 스택 ![img](https://blog.kakaocdn.net/dn/cC1MR5/btr1QwKHa2P/iVlOamnCuGQNGj3KIqU18K/img.png) 코드 N, M = map(int, input().split()) stack = [[] for _ in range(7)] count = 0 for _ in range(N): l, p = map(int, input().split()) while stack[l] and stack[l][-1] > p: stack[l].pop() count += 1 if not stack[l] or stack[l][-1] < p: stack[l].append(p) count += 1 print(.. 2023. 3. 25.
[Python] 백준 1018 체스판 다시 칠하기 🧑‍💻 [Python] 백준 1018 체스판 다시 칠하기 Silver 4 - 완전 탐색 코드 N, M = map(int, input().split()) board = [list(input()) for _ in range(N)] def chess(i, j): global result change_1,change_2 = 0, 0 for row in range(8): for column in range(8): if (row + column) % 2 == 0 and board[i + row][j + column] == "B": change_1 += 1 elif (row + column) % 2 == 1 and board[i + row][j + column] == "W": change_1 += 1 if (row .. 2023. 3. 24.