본문 바로가기

프로그래밍/알고리즘128

이코테 구현 파이썬 왕실의 나이트 A. 문제 8 x 8 좌표평면. 나이트는 L자 형태로만 이동할 수 있고, 정원 밖으로 나갈 수 없다. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기 행 위치는 1~8로 표현하고, 열 위치는 a~h로 표현한다. 나이트가 이동할 수 있는 경우의 수를 출력하라. a. 예를 들면. 나이트의 위치가 a1일 때 이동할 수 있는 경우의 수는 2가지다.오른쪽으로 두 칸 이동 후 아래로 한 칸 이동하기 (c2)아래로 두 칸 이동 후 오른쪽으로 한 칸 이동하기 (b3) b. 입력 조건 첫째 줄에 8x8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열이 입력된다. 문자는 a1과 같이 열행으로 이뤄진다. c. 출력 조.. 2023. 2. 12.
이코테 그리디 파이썬 큰 수의 법칙 A. 문제 다양한 수로 이루어진 배열을 M번 더하여 가장 큰 수를 만든다. 단, 배열의 특정한 인덱스에 해당하는 수가 연속해서 K번을 초과하여 더해질 수 없다. 서로 다른 인덱스에 해당하는 수가 같은 경우에도 서로 다른 것으로 간주한다. N은 배열의 크기, M은 숫자가 더해지는 횟수, K는 연속해서 더할 수 있는 횟수. a. 예를 들면. [2, 4, 5, 4, 6] 배열, M = 8, K = 3은 6 + 6 + 6 + 5 + 6 + 6 + 6 + 5 = 46 이다.[3, 4, 3, 4, 3] 배열, M = 7, K = 2은 4 + 4 + 4 + 4 + 4 + 4 + 4 = 28 b. 입력 조건 첫번째 줄에 N (2 2023. 2. 12.
백준 - N과 M(1) 15649번 파이썬 문제 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 해결 코드 from itertools import permutations n, m = map(int, input().split()) lst = list(map(str, range(1,n+1))) for i in permutations(lst, m): print(' '.join(i)) - 백트래킹으로 풀이 - 순열을 이용하여 풀이 - 1부터 n까지의 수를 배열로 넣고 permutations함수로 다른 배열로 만든다 - 그리고 공백을 포함해서 요소들을 출력한다.. 2023. 2. 10.
백준 - 1로 만들기 1463 파이썬 문제 해결코드 x = int(input()) # 초기화(dp가 1일 때, 연산횟수 0회) dp = {1: 0} # 재귀 (탑다운 방식) def cal(n): if n in dp.keys(): return dp[n] if (n % 3 == 0) and (n % 2 == 0): dp[n] = min(cal(n // 3) + 1, cal(n // 2) + 1) elif n % 3 == 0: dp[n] = min(cal(n // 3) + 1, cal(n - 1) + 1) elif n % 2 == 0: dp[n] = min(cal(n // 2) + 1, cal(n - 1) + 1) else: dp[n] = cal(n - 1) + 1 return dp[n] print(cal(x)) 3과 2의 공통 배수를 처리하는 .. 2023. 2. 9.
파이썬 그리디 베이스 코드 문제 상황 배열의 크기: n 숫자가 더해지는 횟수: m 주어지는 입력값: k 다양한 수로 이루어진 배열에서 주어진 수들을 m번 더하여 가장 큰 수를 만들기 입력으로 주어지는 k는 항상 m보다 작거나 같음 아이디어 입력값 중에서 가장 큰 수와 두 번째로 큰 수 저장 '가장 큰 수를 k번 더하고, 두 번째로 큰 수를 1번 더한다'를 반복 해결 코드 #n, m, k를 공백으로 구분하여 입력받기 n, m, k = map(int, input().split()) #n개의 수를 공백으로 구분하여 입력받기 data = list(map(int, input().split())) data.sort() #입력받은 수들 정렬하기 first = data[n-1] #가장 큰 수 second = data[n-2] #두번째로 큰 수 .. 2023. 2. 7.
파이썬 입출력 베이스 코드 1. 입력의 개수가 적을 경우 데이터 입력받을 때 input() 데이터의 개수 입력 n = int(input()) 각 데이터를 공백으로 구분하여 입력 data = list(map(int, input().split())) 공백으로 구분된 데이터의 개수가 많지 않을 경우 n, m, k = map(int, input().split()) 2. 입력의 개수가 많은 경우 라이브러리 사용 (readline()으로 입력하면 엔터가 줄 바꿈 기호로 입력되고, 공백을 제거하기 위해 rstrip() 반드시 사용) import sys #문자열 입력받기 data = sys.stdin.readline().rstrip() print(data) 3. 변수 출력 변수 출력 예시 # 출력할 변수들 a = 1 b = 2 print(a, .. 2023. 2. 6.
설날 공부(알고리즘-1259, CS스터디) 코드 #반복문을 돌림 while True: #펠린드롬일지 확인할 숫자를 입력받음 n = input() if n == '0': break #거꾸로 뒤집어서 같은 숫자인지 확인 if n == n[::-1]: #맞으면 'yes'출력 print('yes') #아니면 else: #아니면 'no'를 출력 print('no') 팰린드롬을 그동안 많이 봐왔던 문자열이 아닌 숫자형에도 접목시킨 문제이다 문제를 보고는 rjust가 생각이 났다 앞에서 채우는 건 아는데(rjust) 지우는 건 뭐지?라는 생각이 들었고 최종적으로 슬라이싱을 활용하여 조건문을 통해 해결하였다 해당 백준 문제 독서 이 책을 읽고 있는데 문제를 마주쳤을 때 생각을 어떻게 컴퓨팅적으로 생각을 해야 하는지부터 알려줘서 좋다 쓰면서 익히는 알고리즘과 자.. 2023. 1. 22.
프로그래머스 - 숫자 문자열과 영단어 파이썬 코드 num_dic = {"zero":"0", "one":"1", "two":"2", "three":"3", "four":"4", "five":"5", "six":"6", "seven":"7", "eight":"8", "nine":"9"} def solution(s): answer = s for key, value in num_dic.items(): answer = answer.replace(key, value) return int(answer) 딕셔너리를 완성해서 간단하게 변환해주었다 다른 풀이 1. 직접 코드를 작성(replace 하나하나 작성) def solution(s): if 'one' in s: s= s.replace('one', '1') if 'zero' in s: s= s.replace('.. 2023. 1. 20.
백준 - 10610 30 파이썬 코드 n = list(input()) n.sort(reverse=True) sum = 0 for i in n: sum += int(i) if "0" not in n or sum % 3 != 0: print(-1) else: print(''.join(n)) 30의 배수가 되기 위한 조건 - 해당 숫자 내에 '0'이 있어야 함(10의 배수 조건, 30도 10의 배수이기 때문) - 각 자리의 숫자들을 더했을 때 3으로 나누어 떨어져야함(3의 배수 조건) 1. 먼저 숫자를 입력받기위한 n을 입력 받음 2. 가장 큰 수를 찾기위해 내림차순으로 정렬 3. 30의 배수가 되는 조건식 검사 4. 안되면 -1을 리턴하기 문제 2023. 1. 18.