Algorithm 90

[프로그래머스] 멀리 뛰기 - 같은 것이 있는 순열

문제 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12914 멀리 뛰기를 연습하는 효진이는 한 번에 1칸 또는 2칸을 뛸 수 있다. 예로 들어 칸이 4개라면 효진이는 (1칸, 1칸, 1칸, 1칸), (1칸, 2칸, 1칸), (1칸, 1칸, 2칸), (2칸, 1칸, 1칸), (2칸, 2칸)의 5가지 방법으로 맨 끝에 도달할 수 있다. 멀리뛰기에 사용될 칸의 수 N이 주어질 때 효진이가 끝에 도달하는 방법이 몇 가지인지 알아낸 후, 그 값을 1234567로 나눈 나머지를 반환하라. 같은 것이 있는 순열 이해하기 편하게 예시를 들어 설명한다. \(a, b, c, d, e\) 를 일렬로 나열하는 방법의 수는 \(5!\)이 된다. 그렇다면 \(a..

Algorithm 2023.10.12

[프로그래머스] 연속 부분 수열 합의 개수

문제 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/131701 수열을 갖고 놀기 좋아하는 철호는 어떤 자연수로 이루어진 원형 수열의 연속하는 부분 수열의 합으로 만들 수 있는 수가 모두 몇 가지인지 알고 싶어졌다. 원형 수열이란 일반적인 수열에서 처음과 끝이 연결된 형태의 수열을 말한다. 예를 들어 수열 [7, 9, 1, 1, 4]로 원형 수열을 만들면 다음과 같다. 원형 수열은 처음과 끝이 연결되어있어 연속하는 부분 수열도 일반 수열보다 많다. 원형 수열의 원소 elements가 주어질 때, 원형 수열의 연속 부분 수열의 합으로 만들 수 있는 수의 개수를 반환하라. 풀이 1 프로그래밍적으로 원형 수열을 다룰 때는 인덱스를 리스트 길이로..

Algorithm 2023.10.11

[프로그래머스] 예상 대진표

문제 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12985 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행하는 게임대회가 개최되었다. 참가자는 각각 1부터 N번을 배정받고, 1번↔2번, 3번↔4번, ... , N-1번↔N번의 참가자끼리 게임을 진행한다. 각 게임에서 이긴 사람은 다음 라운드에 진출하는데, 다음 라운드에 진출할 참가자는 1번부터 N/2번을 다시 차례대로 배정받습니다. 1번↔2번 끼리 겨루는 게임에서 2번이 승리했다면 다음 라운드에서 1번을 부여받고, 3번↔4번에서 겨루는 게임에서 3번이 승리했다면 다음 라운드에서 2번을 부여받는다. 게임은 최종 한 명이 남을 때까지 진행된다. 이때, 처음 라운드에서 A번을 가진 참가자..

Algorithm 2023.09.21

[프로그래머스] 구명보트

문제 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42885 구명보트를 이용해 무인도에 갇힌 사람들을 구출하려고 한다. 구명보트는 최대 2명까지 탈 수 있고, 무게 제한도 있다. 예로 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 50kg]이고 구명보트의 무게 제한이 100kg이면 2/4번째 사람은 같이 탈 수 있지만 1/3번째 사람은 같이 탈 수 없다. 사람들의 몸무게를 담은 배열 people과 구명보트의 무게 제한 limit가 매개변수로 주어질 때, 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 반환하는 함수를 작성한다. 구명보트의 무게 제한은 항상 사람들의 몸무게 중 최댓값보다 크게 주어지므로 사람들을 구출..

Algorithm 2023.09.18

[프로그래머스] 다음 큰 숫자

문제 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12911 자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의한다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 개수가 같다. 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수이다. 예를 들어 78(1001110)의 다음 큰 숫자는 83(1010011)입니다. 자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 반환하는 함수를 작성하라. 접근 자연수 n을 이진수로 변환한 뒤, 덧셈 연산에 의해 자리값이 01에서 10으로 바뀌는 지점을 찾는다. 남은 오른쪽 자리값은..

Algorithm 2023.09.11

[프로그래머스] 햄버거 만들기

문제 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/133502 상수는 햄버거 가게에서 햄버거를 포장하는 일을 한다. 다른 직원이 햄버거 재료를 조리해 주면 조리된 순서대로 상수 앞에 아래에서부터 위로 쌓이고, 상수는 순서에 맞게 쌓여서 완성된 햄버거를 옮겨 포장한다. 상수네 햄버거 가게는 빵 - 야채 - 고기 - 빵 순서로 쌓인 햄버거만 포장하고, 상수가 포장하는 동안은 재료가 추가로 들어오지도 않는다. 재료가 쌓인 높이도 무시한다. 예로 들어, 상수 앞에 쌓인 재료의 순서가 [야채, 빵, 빵, 야채, 고기, 빵, 야채, 고기, 빵] 일 때, 상수는 여섯 번째 재료가 쌓였을 때, 세 번째 재료부터 여섯 번째 재료를 이용하여 햄버거를 포장..

Algorithm 2023.08.23

[프로그래머스] 신규 아이디 추천

문제 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/72410 카카오에 입사해 카카오계정개발팀에 배치된 신입 개발자 네오는 카카오 서비스에 가입하는 사용자의 아이디를 생성하는 업무를 담당하게 되었다. 네오에게 주어진 업무는 새로 가입하는 사용자가 규칙에 맞지 않는 아이디를 입력하면 입력한 아이디와 유사하면서 규칙에 맞는 아이디를 추천해 주는 것이다. 아이디 규칙은 다음과 같다. 아이디의 길이는 3자 이상 15자 이하여야 한다. 아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있다. 단, 마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없다. 네오는 다음과 같은 처리를 순차적으로 ..

Algorithm 2023.08.16

[프로그래머스] 대충 만든 자판

문제 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/160586 컴퓨터 키보드 자판과 다르게 휴대폰의 자판은 하나의 키에 여러 개의 문자가 할당될 수 있다. 키 하나에 여러 문자가 할당된 경우, 동일한 키를 연속해서 빠르게 누르면 할당된 순서대로 문자가 바뀐다. 예를 들어, 1번 키에 "A", "B", "C" 순서대로 문자가 할당되어 있다면 1번 키를 한 번 누르면 "A", 두 번 누르면 "B", 세 번 누르면 "C"가 된다. 동일한 규칙으로 만든 휴대폰 자판이 있다고 하자. 이 휴대폰 자판은 키가 1개부터 최대 100개까지 있을 수 있으며, 특정 키를 눌렀을 때 입력되는 문자들도 무작위로 배열되어 있다. 같은 문자가 자판 전체에 여러 번..

Algorithm 2023.08.15

[프로그래머스] 옹알이(2)

문제 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/133499 머쓱이가 돌보는 조카는 "aya", "ye", "woo", "ma", 그리고 이 네 가지 발음을 조합해 만들 수 있는 발음 밖에 하지 못한다. 그리고 연속해서 같은 발음을 하는 것을 어려워한다. 입력으로 문자열 배열 babbling이 주어지면 머쓱이의 조카가 발음할 수 있는 단어의 개수는 몇 개인가? 내 풀이 단순하게 접근했다. 1. 문자열 b이 조카가 발음할 수 있는 문자열 defi로 시작하는지 확인한다. 단, 이전에 발음한 문자열 pre이 아니어야 한다. 2. 만약 조건에 맞으면 발음한 문자열 pre을 갱신하고, 문자열 b를 문자열 defi 길이만큼 앞에서 자른다. 3. ..

Algorithm 2023.08.10

[알고리즘] 어떤 수의 모든 약수 구하기

개요 수학에서 약수(divisior)란 어떤 수를 나누어 떨어지게 하는 수를 말한다. 알고리즘 문제를 풀다 보면 약수를 다룰 일이 많다. 보통 어떤 수의 모든 약수를 찾는다던가, 약수의 개수를 찾게 되는데 이 글에서는 어떤 수의 모든 약수를 찾는 방법을 적어둔다. 일반적인 방법 약수를 찾을 때 가장 단순하게 접근하는 방법은 반복문을 활용하는 것이다. 예로 들어 100의 모든 약수를 찾는다고 가정할 때 1부터 100까지의 모든 수에 대해 100을 나누어 떨어지게 하는 수를 찾는 것이다. def get_divisior(num): result = [] for i in range(1, num + 1): if num % i == 0: result.append(i) return result if __name__ =..

Algorithm 2023.08.09
1 2 3 4 5 6 ··· 9