[프로그래머스] 예상 대진표 - Python(파이썬)
·
파이썬/코딩테스트
문제 이해 N명의 선수들중 A선수와 B선수가 붙게되는 라운드를 구하여라 두선수는 무조건 이겨서 올라간다. 이기면 앞션 참가자 번호의 첫번째 번호로 올라간다. ​ 경기를 이기면 앞자리 번호로 이동하는데 번호 생성 규칙이 A/2 의 올림이다. 승부를 볼때마다 A와 B의 차례인지 확인한다. A가 2의 n승일때 B = A-1 , B가 2의 n승일때 A = B-1 이면 A와 B의 승부 차례이다. import math def solution(n,a,b): answer = 1 while True: if a % 2 == 0 and b == (a-1): break elif b % 2 == 0 and a == (b-1): break else: a = math.ceil(a/2) b = math.ceil(b/2) answer..
[프로그래머스] 올바른 괄호 - Python(파이썬)
·
파이썬/코딩테스트
문제 이해 괄호가 바르게 짝지어져야한다. '('로 열었으면 ')'로 닫아야한다. 괄호의 개수는 '(',')' 동일해야한다. ​ 이 문제의 경우 '(' 가 담겨있는 left리스트 하나와 ')'가 담겨있는 right리스트를 만들었다. 리스트에 담으면서 괄호의 짝이 맞는지 count 변수로 '(' 경우 +1 ')'경우 -1 괄호가 잘 닫히면 0 아니면 -1로 체크하였다. def solution(s): answer = True left = [] right = [] count = 0 for i in s: if i == '(': left.append(i) count += 1 else: right.append(i) count -= 1 # 괄호를 열고 닫았는지 확인 if count == -1: answer = Fals..
알고리즘 소수 구하기
·
파이썬/코딩테스트
소수의 판별: 기본적인 알고리즘 성능 분석 2부터 𝑋-1까지의 모든 자연수에 대하여 연산을 수행해야 한다 모든 수를 하나씩 확인한다는 점에서 시간 복잡도는 O(X) 이다 ​ 약수의 성질 모든 약수가 가운데 약수를 기준으로 곱셈 연산에 대해 대칭을 이루는 것을 알 수 있다 예를 들어 16의 약수는 1, 2, 4, 8, 16이다 이때 2 X 8 = 16은 8 X 2 = 16과 대칭이다 따라서 우리는 특정한 자연수의 모든 약수를 찾을 때 가운데 약수(제곱근)까지만 확인하면 된다 예를 들어 16이 2로 나누어떨어진다는 것은 8로도 나누어떨어진다는 것을 의미한다 소수의 판별: 개선된 알고리즘 (Python) import math # 소수 판별 함수 def is_prime_number(x): # 2부터 x의 제곱근..
[프로그래머스] 숫자 짝궁 - Python(파이썬)
·
파이썬/코딩테스트
문제 이해 X와 Y의 숫자를 비교하여 같은 숫자를 찾아라 공통으로 나타나는 숫자를 가장 큰 정수로 리턴해라 정수는 0이 될수 없다. 공통 숫자가 없으면 -1 ​ 0 ~ 9 까지 숫자를 담을 리스트 n1, n2를 생성하여 해당하는 숫자 위치에 +1 추가 한다. n1, n2를 비교하며 n2가 크면 str(i)*n1[i] 아니라면 str(i)*n2[i] 로 문자열을 붙여준다. def solution(X, Y): answer = '' n1 = [0,0,0,0,0,0,0,0,0,0,0] n2 = [0,0,0,0,0,0,0,0,0,0,0] for i in X: n1[int(i)] += 1 for i in Y: n2[int(i)] += 1 for i in range(9,-1, -1): n = n1[i] if n1[i..
[프로그래머스] 콜라 문제 - Python(파이썬)
·
파이썬/코딩테스트
문제 이해 빈병 콜라 a개를 주면 b개를 준다. n개의 빈병을 가져다 주면 총 몇개의 빈 병을 돌려받는가 식 : n - n의 최대공약수 + n//a = n ​ n개는 내가 가지고 있는 빈 병 개수로 루프를 돌때 가지고 있는 빈병이 필요한 빈병 개수보다 작으면 탈출한다. 루프를 돌때마다 내가 가지고 있는 병으로 나올수 있는 최대 빈병수들을 더한다. def solution(a, b, n): answer = 0 while True: if n < a: break count = (n//a) * b n = n - ((n//a)*a) + count answer += count return answer
[프로그래머스] 옹알이(2) - Python(파이썬)
·
파이썬/코딩테스트
문제 이해 아기의 옹알이는 'aya', 'ye', 'woo', 'ma'만 할 수 있다. 같은 옹알이를 두번이상 발음할수 없다. 아기의 옹알이는 그대로 발음해야한다 woo -> wo는 불가능하다. babbing 리스트에 있는 옹알이를 말할수 있는 발음으로 조합이 되는지 알아보자 ​ babbing 리스트에서 발음하나씩 꺼내서 조카가 말할수 있는 단어들을 하나씩 조합하게 만들었다. 발음을 리스트로 담고 길이가 0이되면 루프를 나오고 만약 처음에 성공하는 발음이 하나도 없을시 루프를 통과한다. 같은 옹알이를 두번 할 수 없기에 check 를 통해 루프를 돌때 이전에 같은 발음을 했는지 체크한다. def solution(babbling): answer = 0 for i in babbling: my_list = l..
[프로그래머스] 햄버거 만들기 - Python(파이썬)
·
파이썬/코딩테스트
문제 이해 햄버거를 빵, 야채, 고기, 빵 순서로 만들수 있는 개수를 구해라 연속된 순서여야만 햄버거로 만들수 있다. 1,2,3 순서대로 빵,야채,고기 이다. 햄버거를 만들면 만들어진 부분이 제거된 상태로 재료를 다시 쌓아서 햄버거가 완성되는지 본다. ​ 문제의 경우 리스트에서 [1,2,3,1] 을 찾고 리스트에서 해당 인덱스들을 삭제후 다시 [1,2,3,1]을 찾는 작업을 한다. 리스트의 index의 경우 햄버거를 찾았을때 다시 처음으로 돌아가는게 아닌 찾은 위치의 -3부터 시작해서 찾는다 이경우는 어차피 앞부분은 햄버거를 못찾기에 다시 햄버거를 만들수 있는 -3인덱스로 시작해서 탐색한다. 마지막 햄버거의 경우 리스트길이 -3보다 인덱스가 크면 반복문은 끝난다. def solution(ingredien..
[프로그래머스] 푸드 파이트 대회 - Python(파이썬)
·
파이썬/코딩테스트
문제 이해 음식의 나열을 적은 칼로리부터 큰 칼로리로 왼쪽 오른쪽 같이 배열 중간에는 물로서 0이 들어가야 한다. food의 0 인덱스는 남은 음식이어서 인데스 1부터 123시작 ​ 왼쪽 선수와 오른쪽 선수의 음식의 나열이 같으므로 리스트에 담아서 나열하고 중간에 0을 삽입후 역정렬한 리스트를 나열시켜서 문제를 해결하였다. def solution(food): answer = '' del(food[0]) list = [] num = 0 for i in food: if i%2 == 1: i -= 1 num += 1 for j in range(int(i/2)): list.append(num) answer = ''.join(map(str, list)) + '0' list.sort(reverse=True) ans..
[프로그래머스] 가장 가까운 같은 글자 - Python(파이썬)
·
파이썬/코딩테스트
문제 이해 문장을 받아 한글자씩 같은 글자가 있는지 비교를 한다. 비교했을 때 같은 글자가 없다면 -1 같은 글자가 있다면 거리값이 리스트에 들어간다. 같은 글자가 2개 이상 있다면 가까이에 있는 값이 리스트에 들어간다. 비교는 현재 글자 인덱스보다 작은것만 비교한다. ​ 제한사항에 문장의 길이는 10,000 으로 제곱이 되어도 시간복잡도상 문제가 없을거 같아 완전탐색으로 풀었다. def solution(s): # 첫번째 리스트 값은 무조건 -1이다. answer = [-1] for i in range(1, len(s)): index = [] count = 0 for j in range(0, i): if s[i] == s[j]: index.append(i-j) count += 1 if count == 0..
[프로그래머스] 과일 장수 - Python(파이썬)
·
파이썬/코딩테스트
문제 이해 사과의 박스안에는 m개 만큼 들어간다 사과박스 가격은 m * (사과박스에 들어있는 최저점수) 이다. 최대의 이윤을 받으려면 사과박스를 어떻게 만들어야하는가 사과들을 역순으로 정렬 시켜서 리스트에 m개씩 분할시키기로 했다. 각 리스트들을 정렬하여 첫번째 값 최저점수를 뽑아 * m을 하였고 리스트에 담았다. 최종으로 리스트의 합계를 더한 값이 최대의 이윤을 만든 값이 된다. def solution(k, m, score): score.sort(reverse=True) list_chunked = list_chunk(score, m) result = [] for i in list_chunked: if len(i) == m: i.sort() result.append(i[0] * m) return sum(..
[백준] 베스트셀러 - Python(파이썬)
·
파이썬/코딩테스트
입력학 n개들의 책중 가장 많이 입력된 책의 이름을 출력해주는 알고리즘이다. ​ 우선 책들의 중복을 제거한 값들과 책들을 비교하면서 책종류마다 카운트를 리스트로 만들었고 ​ 카운트가 담긴 리스트와 카운트 리스트의 MAX 값을 비교해 MAX가 한개 이상일 경우 temp 임시 리스트에 담아 ​ 값을 정렬하여 첫벗째 값으로 프린트해주었다. # 베스트셀러 n = int(input()) book = [] for i in range(n): book.append(input()) # 입력된 책들의 중복을 제거하여 책 종류만 리스트에 담는다. bookList = list(set(book)) result = [] # 책 종류별로 몇권의 책이 있는지 개수를 리스트에 담는다. for i in bookList: cnt = 0 ..
[백준] 통계학 - Python(파이썬)
·
파이썬/코딩테스트
예외조건 n개의 숫자를 입력받아 총 4가지의 결과를 출력하면 되는 문제이다. ​ 첫번째 줄은 산술 평균값을 구하는 문제로 n개의 값의 평균을 구하는데 첫번째 자리는 반올림하여 출력을 하기에 리스트의 총합을 n만큼 나눴다. ​ 예외조건으로 평균값이 -1 에서 0사의의 값이면 반올림하여 -0이 아닌 0으로 만들었다. ​ 두번째 줄은 중앙값 출력으로 이 문제의 경우 전부 홀수로 이루어져있기에 리스트를 정렬하고 리스트 길의의 // 2한값의 리스트 값을 찾아주었다. ​ 세번째 최빈값 출력으로 빈도수가 제일 많이 나온 숫자를 출력한다. (빈도수가 같을경우 두번째로 작은 숫자 출력) ​ 이 같은 경우 파이썬 딕셔러리를 사용하여 리스트에 존재하는 숫자를 키로 사용하여 숫자가 딕셔러리에 미존재하면 추가 존재하면 valu..
대전집주인
'파이썬/코딩테스트' 카테고리의 글 목록