https://programmers.co.kr/learn/courses/30/lessons/12953 코딩테스트 연습 - N개의 최소공배수 두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배 programmers.co.kr 해설 : n개의 숫자가 주어질 때, 모든 숫자의 최소공배수를 구하는 문제이다. 풀이 : 수들 중 가장 큰 수 a부터 모든 수를 곱한 값 l까지 1씩 더해가며 모든 수에 대해 나머지를 확인하며 최소공배수가 되는 값을 찾도록 구현하였다. 1234567891011def solution(arr): l = 1 for i in a..
https://programmers.co.kr/learn/courses/30/lessons/12948 코딩테스트 연습 - 핸드폰 번호 가리기 프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자 programmers.co.kr 해설 : 핸드폰 번호가 주어졌을 때 핸드폰 번호의 뒷 4자리를 제외한 나머지 숫자들을 모두 * 로 변환하여 출력하는 문제이다. 풀이 : Python의 list slicing을 이용하여 뒷 4자리를 제외한 나머지의 길이만큼 *를 만들어주고, 여기에 원래 뒷자리 4개를 붙여주었다 12def solution(phone_number): retur..
https://programmers.co.kr/learn/courses/30/lessons/12945 코딩테스트 연습 - 피보나치 수 피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다. 예를들어 F(2) = F(0) + F(1) = 0 + 1 = 1 F(3) = F(1) + F(2) = 1 + 1 = 2 F(4) = F(2) + F(3) = 1 + 2 = 3 F(5) = F(3) + F(4) = programmers.co.kr 해설 : 2 이상의 n이 입력되었을 때, n 번째 피보나치 수를 1234567로 나눈 나머지를 출력하면 된다. 풀이 : DP의 가장 대표적인 문제이다. n-1과 n-2번째의 값을 더하여 n..
https://programmers.co.kr/learn/courses/30/lessons/12936 코딩테스트 연습 - 줄 서는 방법 n명의 사람이 일렬로 줄을 서고 있습니다. n명의 사람들에게는 각각 1번부터 n번까지 번호가 매겨져 있습니다. n명이 사람을 줄을 서는 방법은 여러가지 방법이 있습니다. 예를 들어서 3명의 사람 programmers.co.kr 해설 : 1번부터 n번, 총 n명의 사람이 줄을 서는 모든 경우를 사전순으로 정렬한 후 k번째 줄 서는 방법을 찾는 문제이다. 풀이 : 처음엔 permutations을 이용하여 실제로 줄 서는 모든 방법을 찾으려고 하였으나 n의 범위가 20이므로 메모리, 시간 효율성에서 모두 통과하지 못했다. 따라서 다른 방법을 생각하였는데 이는 수학적 특징을 이..
https://programmers.co.kr/learn/courses/30/lessons/12929 코딩테스트 연습 - 올바른 괄호의 갯수 올바른 괄호란 (())나 ()와 같이 올바르게 모두 닫힌 괄호를 의미합니다. )(나 ())() 와 같은 괄호는 올바르지 않은 괄호가 됩니다. 괄호 쌍의 개수 n이 주어질 때, n개의 괄호 쌍으로 만들 수 있는 모 programmers.co.kr 해설 : 소괄호의 짝이 n개 주어질 때, 이 소괄호의 짝을 이용해서 만들 수 있는 모든 올바른 괄호열의 개수를 찾는 문제이다. 풀이 : 우선 괄호가 올바른 괄호열인지 체크하는 함수를 구현하고, 재귀를 이용해서 n개의 짝으로 만들 수 있는 모든 괄호 문자열에 대해 올바른 괄호열인지 체크하도록 했다. 123456789101112..
https://programmers.co.kr/learn/courses/30/lessons/12926 코딩테스트 연습 - 시저 암호 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀 programmers.co.kr 해설 : 문자열 S와 정수 N이 주어질 때, 문자열 S의 각 요소들을 n만큼 밀어서 변환시킨 결괏값을 출력하면 된다. 풀이 : ascii 기준으로 "a"는 97번, "A"는 65번이므로 주어진 문자가 대문자, 또는 소문자인지 판별하고 대문자라면 그 값을 ascii로 변환한 값에 65를 빼고 26으로 나눈 나머지를 변환시키고, 소문자라..
https://programmers.co.kr/learn/courses/30/lessons/12913 코딩테스트 연습 - 땅따먹기 땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟 programmers.co.kr 해설 : N개의 행과 4개의 열로 이루어진 배열이 주어질 때 0번째 행부터 한 행씩 증가하며 4개의 열들 중 하나를 밟는다. 이 때, 직전에 밟았던 열은 밟을 수 없다. N번째 행까지 도달하였을 때 밟고 내려올 수 있는 칸들의 총합 중 가장 큰 값을 찾는 문제이다. 풀이 : DP를 이용하여 해결할 수 있는 문제이다. 각 열마다 선택할 수 있는..
https://programmers.co.kr/learn/courses/30/lessons/12911 코딩테스트 연습 - 다음 큰 숫자 자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니 programmers.co.kr 해설 : n이 주어졌을 때, n보다 큰 수들중 n과 이진수의 1 개수가 같은 가장 작은 수를 찾으면 된다. 풀이 : 숫자를 이진수로 변환하여 1의 개수를 카운트해서 리턴해주는 binary함수를 구현하고 c라는 변수에 n의 이진수 1 값의 개수를 넣어둔다. while문으로 n을 1씩 증가시켜가며 이진수 1의 개수가 c와 같은 값을 ..
https://programmers.co.kr/learn/courses/30/lessons/12909 코딩테스트 연습 - 올바른 괄호 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은 programmers.co.kr 해설 : 괄호로 이루어진 문자열이 주어질 때, 이 문자열이 올바른 괄호 문자열인지 판단하는 문제이다. 풀이 : stack을 사용하는 가장 대표적인 문제라고 할 수 있다. stack에 괄호를 하나씩 넣으면서 짝이 맞으면 꺼내고 아니면 넣는다. 마지막에 stack에 원소가 있다면 올바르지 않고 없다면 올바른 괄호이다. 1..