[Python/프로그래머스/배열회전] 행렬 테두리 회전하기
Develop/Algorithm 2021. 5. 10. 14:09

문제 rows x columns 크기인 행렬이 있습니다. 행렬에는 1부터 rows x columns까지의 숫자가 한 줄씩 순서대로 적혀있습니다. 이 행렬에서 직사각형 모양의 범위를 여러 번 선택해, 테두리 부분에 있는 숫자들을 시계방향으로 회전시키려 합니다. 각 회전은 (x1, y1, x2, y2)인 정수 4개로 표현하며, 그 의미는 다음과 같습니다. x1 행 y1 열부터 x2 행 y2 열까지의 영역에 해당하는 직사각형에서 테두리에 있는 숫자들을 한 칸씩 시계방향으로 회전합니다. 다음은 6 x 6 크기 행렬의 예시입니다. 이 행렬에 (2, 2, 5, 4) 회전을 적용하면, 아래 그림과 같이 2행 2열부터 5행 4열까지 영역의 테두리가 시계방향으로 회전합니다. 이때, 중앙의 15와 21이 있는 영역은 회전..

[Python/프로그래머스/월간 코드 챌린지 시즌2] 괄호 회전하기
Develop/Algorithm 2021. 5. 9. 20:00

문제 다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다. (), [], {} 는 모두 올바른 괄호 문자열입니다. 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다. 만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다. 대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록..

[Algorithm/Python] 파이썬 소수 찾기(Python Program to Check Prime Number using Sieve of Eratosthenes)
Develop/Algorithm 2021. 3. 5. 18:18

문제 1개 이상의 자연수가 들어있는 배열이 주어졌을 때, 소수의 개수 출력하기 풀이 완전탐색 이용하기 def getPrimeNum(n): if n == 1 : return False elif n == 2 : return True for i in range(2, n): if n % i == 0 : return False return True answer = 0 # arr 가 주어진 배열 for k in arr : if getPrimeNum(k) : answer += 1 print(answer) for 문을 이용해 배열의 원소를 차례대로 호출한다. 소수의 정의는 1과 그수 자신 이외의 자연수로는 나눌 수 없는, 1보다 큰 자연수(출처:위키백과) 이기 때문에 for 문을 통해 2부터 n-1까지 n을 나눠서 나..

[Algorithm/Python] 파이썬 최대공약수와 최소공배수 구하기 ( 유클리드 호제법 )
Develop/Algorithm 2021. 3. 5. 03:29

문제 n, m 두 개의 자연수가 주어졌을 때, 최대공약수와 최소공배수를 구하기 풀이 math 모듈의 gcd 함수 사용하기 from math import gcd def lcm(a,b) : return a*b // gcd(a,b) print(gcd(n,m), lcm(n,m)) math 모듈의 gcd 함수를 사용한다면 바로 최대공약수를 알아낼 수 있다. 최소공배수는 [ 두 수의 곱 / 두 수의 최대공약수 ] 로 표현할 수 있다. 최소공배수를 구하는 것에 대해 이해가 잘 가지않아서 예시를 들어서 표현해보겠다. 이때, 최소공배수는 2*3 = 6 , 최대공약수는 2*3*4*3 = 72 가 나오게 된다. 최대공약수의 식에서 뒤에 있는 4와 3에 집중해야 한다. 4가 나온 경로를 보면 24 / 2 / 3 의 과정이고 ..

[Algorithm/Python] 파이썬 2진수 변환 다양한 풀이 (Convert decimal to binary in python)
Develop/Algorithm 2021. 3. 4. 01:00

문제 양의 정수 n이 주어졌을 때, 이를 이진수로 변환하기 풀이 2진수 변환 함수 사용 ⭕️ binaryNum = format(n, 'b') return binaryNum format 이라는 함수를 이용한다. 'b' 는 2진수를 뜻한다. binaryNum = bin(n) return binaryNum[2:] bin 이라는 함수 이용한다면 'ob + 2진수 변환 수' 로 나오기 때문에 앞에 ob를 제거한 후 return 해준다. 2진수 변환 함수 사용 ❌ def getBinaryNum(n, lists): a, b = divmod(n, 2) lists.append(b) if a == 0 : return lists else : return getBinaryNum(a, lists) answerList = [] ..

[Algorithm/Python] 파이썬 약수 구하기 (시간복잡도 줄여보기)
Develop/Algorithm 2021. 3. 3. 18:16

문제 1 이상의 자연수 N이 주어졌을 때, N의 약수 구하기 풀이 단순한 풀이 방법 def getMyDivisor(n): divisorsList = [] for i in range(1, n + 1): if (n % i == 0) : divisorsList.append(i) return divisorsList for 문을 이용해 범위를 약수가 될 수 있는 최솟값인 1부터 최댓값인 자기 자신까지 돌려준다. 만약, 나머지가 0이라면 약수라는 뜻이므로 배열에 저장해준다. 이 방법을 사용할 경우 작은 수부터 i가 들어가므로 자동으로 오름차순 정렬이 된다. 시간 복잡도 : O(N) 더 효율적인 풀이 방법 def getMyDivisor(n): divisorsList = [] for i in range(1, int(n..

[Python/프로그래머스/Level3] 최고의 집합
Develop/Algorithm 2021. 2. 23. 17:03

문제 자연수 n 개로 이루어진 중복 집합(multi set, 편의상 이후에는 집합으로 통칭) 중에 다음 두 조건을 만족하는 집합을 최고의 집합이라고 합니다. 각 원소의 합이 S가 되는 수의 집합 위 조건을 만족하면서 각 원소의 곱 이 최대가 되는 집합 예를 들어서 자연수 2개로 이루어진 집합 중 합이 9가 되는 집합은 다음과 같이 4개가 있습니다. { 1, 8 }, { 2, 7 }, { 3, 6 }, { 4, 5 } 그중 각 원소의 곱이 최대인 { 4, 5 }가 최고의 집합입니다. 집합의 원소의 개수 n과 모든 원소들의 합 s가 매개변수로 주어질 때, 최고의 집합을 return 하는 solution 함수를 완성해주세요. 제한사항 최고의 집합은 오름차순으로 정렬된 1차원 배열(list, vector) 로 ..

[Python/프로그래머스/Level2/KAKAO] n진수 게임
Develop/Algorithm 2020. 10. 25. 23:59

문제 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0부터 시작해서 차례대로 말한다. 첫 번째 사람은 0, 두 번째 사람은 1, … 열 번째 사람은 9를 말한다. 10 이상의 숫자부터는 한 자리씩 끊어서 말한다. 즉 열한 번째 사람은 10의 첫자리인 1, 열두 번째 사람은 둘째 자리인 0을 말한다. 이렇게 게임을 진행할 경우, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, … 순으로 숫자를 말하면 된다. 한편 코딩 동아리 일원들은 컴퓨터를 다루는 사람답게 이진수로 이 게임을 진행하기도 하는데, 이 경우에는 0, 1, 1..

[Python/프로그래머스/Level2] 스킬트리
Develop/Algorithm 2020. 10. 9. 03:21

문제 선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다. 예를 들어 선행 스킬 순서가스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다. 위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만,썬더 → 스파크나라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다. 선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요. 제한사항 스킬은 알파벳 ..