본문 바로가기
반응형

Algorithm60

[파이썬 알고리즘 문제풀이] : 이분 검색 문제 n개의 숫자가 주어진다. n개의 수를 오름차순 정렬하고 n개의 수 중 한 개의 수인 m이 주어지면 이분 검색으로 m이 정렬된 상태에서 몇 번째에 있는지 구하라. 해결 주어지는 수의 총 개수는 n 정렬하고 몇 번째에 있는지 찾아야 하는 수는 m n의 수 만큼 주어지는 랜덤 수는 a --- m은 a에 꼭 포함되어 있다. 조건을 먼저 잘 생각해 본다. a.sort() 정렬된 상태에서 m이 몇 번째에 존재하는지 찾아야 한다. 주어지는 수들이 들어있는 list인 a를을 일단 정렬한다. lt = 0 rt = n - 1 처음(lt)과 끝(rt)를 선언해 준다. while lt m: rt = mid - 1 else: lt = mid + 1 a[mid]가 m과 같으면 값을 출력하고 브레이크를 걸어준다. n, m =.. 2022. 5. 4.
[프로그래머스] : Python,파이썬 카펫 풀이 def solution(brown, yellow): ab = brown + yellow for b in range(1, ab+1): if (ab / b) % 1 == 0: a = ab/ b if a >= b: if a*2 + b*2 == brown + 4: return [a,b] 방정식을 활용해야 한다. 전제 조건을 살펴보면 카펫의 가로 길이는 세로 길이와 같거나 길다. 즉, 가로 ≥ 세로가 된다. 가로를 a 세로를 b라고 했을 때 갈색과 노란색 칸 수를 구해보면 수식은 2a - 2b - 4 = Brown이 된다. 가로 * 세로를 했을 때 각 겹치는 모서리 부분을 빼줘야 하기 때문에 -4를 해준다. 즉, 저 수식에서 a 값만 구하면 b값을 알 수 있게 된다. for 문으로 전체 네모칸 만큼 반복시킨다. .. 2022. 4. 29.
[프로그래머스] : H-Index Python,파이썬 풀이 https://programmers.co.kr/learn/courses/30/lessons/42747 코딩테스트 연습 - H-Index H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표 programmers.co.kr 풀이 H지수는 게재도니 논문의 수 보다 인용 지수가 작아지는 값을 의미한다. 입력 예제를 참고하면 [3, 0, 6, 1, 5] 총 5편이 게재되었고 인용수는 5 이상이 나와야 한다. 이 중에서 5회 이상 인용이 되지 않은 것은 3,1,0이며 가장 큰 값이 3이된다. def solution(citations): citations.s.. 2022. 4. 18.
[프로그래머스] : 약수의 합 파이썬 풀이 약수의 합 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요. 문제 설명 n은 0 이상 3000이하인 정수입니다. 제한 사항 nreturn 1228 56 입출력 예 설명 입출력 예 #1 12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다. 입출력 예 #2 5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다. 입출력 예 def solution(n): answer = 0 for i in range(1, n+1): if n%i==0: answer += i return answer print(solution(12)) 풀이 더해진 값을 담아두기 위한 전역 변수 하나를 만들어주고 for문을 통해 1부터 n번까지 반복하도록 만들어 주었다... 2022. 2. 11.
[프로그래머스] : 자연수 뒤집어 배열로 만들기 파이썬 풀이 자연수 뒤집어 배열로 만들기 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 문제 설명 n은 10,000,000,000이하인 자연수입니다. 제한 조건 nreturn 12345[5,4,3,2,1] 입출력 예시 def solution(n): a = list(str(n)) a.reverse() return list(map(int, a)) print(solution(12345)) 문제 풀이 먼저 int 형식의 데이터를 문자열로 바꿔 list a에 담았다. a를 reverse() 함수를 통해 뒤집어주었다. list 형식으로 리턴을 하면서 문자열로 바꿔주었던 데이터를 다시 정수 자료형으로 바꾸어 리턴해 준다. 맨 아래는 테.. 2022. 2. 9.
[프로그래머스] : 정수 내림차순으로 배치하기 파이썬 풀이 정수 내림차순으로 배치하기 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다. 문제 설명 n은 1이상 8000000000 이하인 자연수입니다. 제한 조건 nreturn 118372873211 입출력 예 def solution(n): aList = list(str(n)) aList.sort(reverse = True) answer = int("".join(aList)) return answer 우선 n의 값이 정수로 주어지기 때문에 문자값으로 바꿔서 aList에 담아준다. aLIst에서 sort를 통해 내림차순 정렬을 해준다. answer에 담아 리턴을 해야 하므로.. 2022. 2. 7.
[프로그래머스] : 정수 제곱근 판별 파이썬 풀이 임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요. 문제 설명 n은 1이상, 50000000000000 이하인 양의 정수입니다. 제한 사항 nreturn 121144 3-1 입출력 예 입출력 예#1 121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다. 입출력 예#2 3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다. 입출력 예 def solution(n): a = (n**0.5) if a % 1 == 0: answer = (a+1)**2 else: answer = -1 return answer a = (.. 2022. 2. 4.
[프로그래머스] : 최대공약수와 최소공배수 파이썬 풀이 두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다. 문제 설명 두 수는 1이상 1000000이하의 자연수입니다. 제한 사항 nmreturn 312[3, 12] 25[1, 10] 입출력 예 입출력 예 #1 위의 설명과 같습니다. 입출력 예 #2 자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다. 입출력 예 설명 def gcd(a, b): if a 2022. 1. 28.
[프로그래머스] : 콜라츠 추측 파이썬 풀이 및 해설 1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다. 1-1. 입력된 수가 짝수라면 2로 나눕니다. 1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. 예를 들어, 입력된 수가 6이라면 6→3→10→5→16→8→4→2→1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야하는지 반환하는 함수, solution을 완성해 주세요. 단, 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요. 문제 설명 입력된 수, num은 1 이상 8000000 미만인 정수입니다. 제한 사항 nresu.. 2022. 1. 27.
[프로그래머스] : 행렬의 덧셈 파이썬 풀이 행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요. 문제 설명 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다. 제한 조건 arr1arr2return [[1,2],[2,3]][[3,4],[5,6]][[4,6],[7,9]] [[1],[2]] [[3],[4]] [[4],[6]] 입출력 예시 def solution(arr1, arr2): for i in range(len(arr1)): for j in range(len(arr1[i])): arr1[i][j] += arr2[i][j] return arr1 풀이 코드 def solut.. 2022. 1. 26.
[프로그래머스] : x만큼 간격이 있는 n개의 숫자 파이썬 풀이 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요. 문제 설명 x는 -10000000 이상, 10000000 이하인 정수입니다. n은 1000 이하인 자연수입니다. 제한 조건 xnanswer 25[2,4,6,8,10] 43[4,8,12] -42[-4, -8] 입출력 예 def solution(x, n): answer = [] for i in range(1, n+1): answer.append(x*i) return answer; 정답 풀이 x부터 시작해서 x씩 증가하는 식을 우선 만들어야 한다. for i in range(1, n+1): 을 통해.. 2022. 1. 24.
[프로그래머스] : 소수 찾기 파이썬 풀이 1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 문제 설명 n은 2이상 1000000이하의 자연수입니다. 제한 조건 nresult 104 53 입출력 예시 입출력 예 #1 1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환 입출력 예 #2 1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환 입출력 예시 설명 def solution(n): ch=[0]*(n+1) cnt=0 for i in range(2, n+1): if ch[i]==0: cnt+=1 for j in range(i, n+1, i): ch[j]=1 answer = cnt.. 2022. 1. 23.
[프로그래머스] : 직사각형 별찍기 파이썬 풀이 이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다. 별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요. 문제 설명 n과 m은 각각 1000 이하인 자연수입니다. 제한 조건 5 3 입력 예시 ***** ***** ***** 출력 예시 a, b = map(int, input().strip().split(' ')) for i in range(b): for j in range(a): print("*", end='') print() a와 b의 값을 받아서 직사각형 별을 찍는다. 5 3을 입력 받아 split로 공백을 기준으로 나누어 a와 b에 값을 받는다. for문을 두 번 돌려 *을 찍어주고 end=’’를 통해 한 라인으로 출력이 되도록 설정해 주었고 j f.. 2022. 1. 22.
[파이썬 알고리즘 문제풀이] : 봉우리 코딩 테스트 문제 풀이 문제 이름 : 봉우리 지도 정보가 N*N 격자판이 주어진다. 격자판에 있는 숫자 중 상하좌우에 있는 숫자보다 큰 숫자는 봉우리 지역인데 이 봉우리 지역이 몇 개인지 구하라. 격자의 가장 자리는 0으로 초기화가 되어 있다고 가정한다. n = int(input()) a = [list(map(int, input().split())) for _ in range(n)] dx=[-1, 0, 1, 0] dy=[0, 1, 0, -1] a.insert(0, [0]*n) a.append([0]*n) for x in a: x.insert(0, 0) x.append(0) cnt = 0 for i in range(1, n+1): for j in range(1, n+1): if all(a[i][j] > a.. 2022. 1. 19.
[파이썬 알고리즘 문제풀이] : 사과나무 문제 n*n 격자판으로 된 과수원에서 다이아몬드 모양의 격자판만 수확하고 수확한 것의 총 수를 구한다. 주의 풀이 n = int(input()) a = [list(map(int, input().split())) for _ in range(n)] res = 0 s = e = n//2 for i in range(n): # j for문은 e까지 돈다. for j in range(s, e+1): res += a[i][j] if i < n//2: s -= 1 e += 1 else: s += 1 e -= 1 print(res) 2022. 1. 2.
[파이썬 알고리즘 문제풀이] : 격자판 최대합 문제 n * n의 격자판이 주어지면 각 행, 열, 두 대각선의 합 중 가장 큰 합을 출력한다. 주의 풀이 n = int(input()) a = [list(map(int, input().split())) for _ in range(n)] # 전역 변수 largest = -2147000000 for i in range(n): sum1 = sum2 = 0 #sum1은 행, sum2는 열 for j in range(n): sum1 += a[i][j] sum2 += a[j][i] # 가장 큰 경우를 구해야 하니 largest에 큰 값을 계속 갱신해 준다. if sum1 > largest: largest = sum1 if sum2 > largest: largest = sum2 # 대각선 값 구하기 sum1 = su.. 2021. 12. 31.
[파이썬 알고리즘 문제풀이] : 수들의 합 문제 N개 수로 된 수열이 있을 때 i번째 수부터 j번째 수 까지의 합이 주어지는 값과 같은 경우의 수를 구하시오. 주의 풀이 # 입력 받는 변수 n, m = map(int, input().split()) a = list(map(int, input().split())) # 알고리즘 풀이에 사용 될 전역 변수 lt = 0 rt = 1 tot = a[0] cnt = 0 # 알고리즘 로직 while True: # while문에 True값을 줘서 무한 반복문을 완성시킨다. if tot 2021. 12. 31.
[파이썬 알고리즘 문제풀이] : 두 리스트 합치기 문제 오름차순으로 정렬이 된 리스트가 주어지고 두 리스트를 그대로 합쳐 오름차순이 정렬된 형태로 출력한다. 주의 풀이 n = int(input()) a = list(map(int, input().split())) m = int(input()) b = list(map(int, input().split())) p1 = p2 = 0 c = [] while p1 < n and p2 < m: # 오름 차순으로 정렬하기 위해 하나씩 값을 비교한다. if a[p1] 2021. 12. 30.
[파이썬 알고리즘 문제풀이] : 카드 역배치(정올 기출) 문제 1부터 20까지 오름차순 정렬 된 카드가 주어지고 주어지는 두 수의 범위 내 카드들을 역으로 배치해준다. 주의 풀이 #a, b = map(int, input().split()) # 스왑하는 방법이다. # a, b = b, a # print(a, b) a = list(range(21)) #_를 통해 변수 없이 반복을 하게 된다. => 시간이 좀 더 단축하게 된다. for _ in range(10): s, e = map(int, input().split()) # +1을 더해줘서 반복하는 수를 맞춰준다. for i in range((e-s+1)//2): # 스왑을 해준다. a[s+i], a[e-i] = a[e-i], a[s+i] a.pop(0) for x in a: print(x, end=' ') 2021. 12. 30.
[파이썬 알고리즘 문제풀이] : 숫자만 추출 문제 문자, 숫자가 섞인 문자열을 입력받고 숫자만 추출해 자연수로 만들어 약수를 출력해 준다. 주의 풀이 s = input() # 누적을 위한 전역변수 res = 0 for x in s: # isdecimal은 0부터 9까지만 찾아준다. # isdigit은 제곱까지 다 찾아준다. if x.isdecimal(): res = res*10+int(x) print(res) cnt = 0 for i in range(1, res+1): if res%i==0: cnt += 1 print(cnt) 2021. 12. 29.
[파이썬 알고리즘 문제풀이] : 회문 문자열 검사 문제 문자열을 입력 받고, 회문 문자열 검사를 한다. 단, 대소문자 구분을 하지 않는다. 주의 파이썬 특징을 살리는 코드로 간단하게 작성할 수도 있으나 가능하면 풀어서 쓰는 게 좋다. 풀이 n = int(input()) for i in range(n): s = input() # s를 대문자화 시켜준다. s = s.upper() ############ 풀어서 쓴 코드 이 코드로 이해하는 게 좋다. #################### #s열의 길이를 구해준다. size = len(s) # 처음과 끝, 짝지어 비교하면 되므로 나누기 2를 해준 수 만큼 비교해 준다. for j in range(size//2): # 맨 뒤에서 리스트에 접근할 때 -1이 먼저인데 j는 0이라 -1-j를 해준다. if s[j] !.. 2021. 12. 28.
반응형