본문 바로가기

코딩 테스트 연습28

[알고리즘] 프로그래머스 - 최대공약수와 최소공배수 최대공약수와 최소공배수 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 구해야 하는 것 # 최대 공약수와 최소 공배수 2. 1을 구하기 위해 필요한 것 # n, m의 공약수와 공배수들 3. 그 외 고려사항 # n이 m의 약수 또는 m이 n의 약수일때, 즉시 n,m을 반환 # n과 m 이 모두 소수면 공약수는 n*m # 그 외에는 n*m을 최대 공약수로 나눠주면? 최소공배수 # 유클리드 호제법? 최대 공약수 구하기 n과 m중 더 큰 수부터 1까지 1씩 줄여가면서 n과 m 둘다 나눠지는 수가 나오면 answer 리스트에 append하고 for문 종료 최소.. 2023. 5. 4.
[알고리즘] 프로그래머스 - 둘만의 암호 둘만의 암호 alpha = [ord(i) for i in s] # 처음 문자열(s)를 아스키 코드로 변환한 문자열들의 리스트 index_board = [i for i in range(97, 123)] # 문자열의 아스키 코드 범위 skip_list = [ord(i) for i in skip] # 스킵할 문자열(skip)을 아스키 코드로 변환한 문자열들의 리스트 index_board 에서 skip_list 의 원소들을 삭제 후 alpha 의 각각의 원소들을 index_board 에서 찾아서 원래 인덱스 + index만큼 해준 뒤 새로운 리스트에 추가 이때 만약 index_board 의 범위를 넘어갈 경우 IndexError가 발생할 것이므로 try - except를 사용해서 해당 경우에 index_boar.. 2023. 5. 3.
[알고리즘] 프로그래머스 - 최소직사각형 최소 직사각형 # sizes 원소들을 정렬해서 첫번째가 큰수가 오게 하기 # 1. 각각의 원소별로 sort하고, for문으로 sizes를 돌면서 큰값을 찾는 방법 # 2. max()와 min()으로 각각 리스트를 만드는 방법 # 구한 리스트로 max(가로) * max(세로) def solution(sizes): a = [max(size) for size in sizes] b = [min(size) for size in sizes] return max(a) * max(b) 2023. 5. 3.
[알고리즘] NBC 선발대 과제 - 파스칼의 삼각형 ''' line1 = [1] line2 = [1, 1] line3 = [1, 2, 1] line4 = [1, 3, 3, 1] line5 = [1, 4, 6, 4, 1] line6 = [1, 5, 10, 10, 5, 1] n = n번째 줄 n번째 줄의 원소의 개수도 n ''' n번째 라인의 i번째 원소 > n-1번째 파스칼[i-1] + n-1번째 파스칼[i] 예상했던 문제점 : 그럼 인덱스가 모자라면, indexerror? > try except로 [1]을 배열에 추가하면? 막상 해보니 초기값을 줘서 IndexError자체가 발생하지 않음. 그냥 마지막에 [1] 만 추가해주면 된다. [1] + [구해야 하는 부분] + [1]이므로 구해야 하는 부분은 n-2개 > range를 하나 적게 처음 1은 배열에 초.. 2023. 5. 2.
[알고리즘] 프로그래머스 - 삼총사 삼총사 for문 def solution(number): cnt = 0 for i in range(len(number)-2): for j in range(i+1, len(number)-1): for k in range(j+1, len(number)): if number[i] + number[j] + number[k] == 0: cnt += 1 return cnt itertools.combinations from itertools import combinations def solution(number): cnt = 0 c = combinations(number, 3) combi_ = list(c) for i in combi_: if sum(i) == 0: cnt +=1 return cnt 2023. 5. 2.
[알고리즘] 프로그래머스 - 콜라 문제 콜라 문제 하나씩 빼기 def solution(a, b, n): answer = 0 while n >= a: n = n - a + b answer += b return answer 나누기 def solution(n, a, b): answer = 0 while n >= a: q, r = divmod(n, a) n = q * b + r answer += q * b return answer 재귀 def solution(n, a, b): if n < a: return 0 return b + solution(n-a+b, a, b) 2023. 5. 2.
[알고리즘] 프로그래머스 - 크레인 인형뽑기 게임 크레인 인형뽑기 게임 보드 정렬하기, 0은 아예 넣지 않고 시계방향으로 90도 돌려버린 리스트로 바꾼 후, result가 비어있거나, 이번에 뽑은 값과 전에 뽑은 값이 다르면, 그냥 크레인으로 뽑아서 result에 넣기 리스트가 비어있지 않고, 이전에 뽑은값 == 전에 뽑은 값이면, result에 넣지 않고, result에서 pop 하고, 카운트를 2개 올림 def solution(board, moves): new_board = [] for i in range(len(board[0])): arr = [board[j][i] for j in range(len(board[0])) if board[j][i]] arr.reverse() new_board.append(arr) result = [] answer = .. 2023. 5. 2.
[알고리즘] 프로그래머스 - 문자열 돌리기 문자열 돌리기 for문으로 돌리기 str = input() for i in str: print(i) 리스트로 바꿨다 접합수술하기 str = input() print("\n".join(list(str))) 2023. 5. 2.
[알고리즘] 프로그래머스 - 배열 조각하기 배열 조각하기 문제의 설명을 그대로 코드로 옮김 def solution(arr, query): for i in range(len(query)): if not i % 2: arr = arr[:query[i]+1] else: arr = arr[query[i]:] return arr 2023. 5. 2.