본문 바로가기

코딩 테스트 연습28

[알고리즘] 프로그래머스 - 카펫 카펫 1. 구해야 하는 것 # 카펫의 가로, 세로 2. 1을 구하기 위해 필요한 것 # 가로 세로를 어떻게 구할지?? # 넓이 = yellow + brown # brown의 면적 = 2*세로 + 2*가로 - 4 # yellow의 면적 = (가로-2) * (세로-2) 3. 그 외 고려해야 할 사항 # 카펫의 긴쪽이 가로 # yellow는 1 이상(가로, 세로 최소 길이는 3부터 시작한다) 1. 풀이 s = yellow + brown # 넓이 for height in range(3, s//3+1): # 세로 길이 후보 i if s % height == 0: # 넓이를 세로 길이로 나눌 수 있다면 width = s / height # 그것은 가로길이 후보 if (height - 2) * (width - 2) .. 2023. 5. 9.
[알고리즘] 프로그래머스 - 괄호 회전하기 괄호 회전하기 입출력 예) 더보기 1. 구해야 하는 것 # 괄호로만 이루어진 문자열 s를 왼쪽으로 회전시켜서 # 올바른 괄호문자열이 되는 x의 개수 2. 1을 구하기 위해 필요한 것 # 이동시킨 문자열이 유효한가를 판단 및 삭제 # 스택에 하나씩 쌓아가면서, 스택에 만약 여는 괄호가 있고, # 마지막으로 들어온 원소가 닫는 괄호라면 둘다 없애기 # 회전시킬 방법 # for문을 사용해 원소를 슬라이싱해서 불이기 3. 그 외 고려해야 할 사항 # 스택? # 시간복잡도? 1. 처음 접근(실패) for문과 슬라이싱을 통해 문자열을 한번 회전시킨 문자열을 s_spin이라는 변수에 할당 여는 괄호가 스택에 들어있고, 스택의 마지막 원소가 닫는 괄호라면, 해당 괄호를 replace 그러나 다음과 같은 상황에서 문제 .. 2023. 5. 8.
[알고리즘] 프로그래머스 - 기사단원의 무기 기사단원의 무기 1. 구해야 하는 것 # 총 철의 무게 2. 1을 구하기 위해 필요한 것 # 공격력이 몇인 무기를 구매할 것인가? # 둘을 비교해서 넘기면 power로 공격력 # 기사번호의 약수의 개수(=공격력) # 협약에 의한 제한(=limit) # 기사별로 공격력이 몇인 무기를 구매할지를 구한 뒤 # 리스트를 바탕으로 철의 무게 계산 3. 그 외 고려해야 할 사항 # number가 100000까지 # 리스트를 먼저 만들고 비교한다. # 문자열로 쓰면, replace를 사용가능? 1. 풀이 # 약수 개수 구하기 a = [0]*number # 기사 인원수만큼의 길이를 가진 리스트 생성 for i in range(1, number+1): # 각각 기사들 한명한명에 대해 for j in range(1, in.. 2023. 5. 8.
[알고리즘] 프로그래머스 - 달리기 경주 달리기 경주 1. 구해야 하는 것 # calligns가 다 끝난 뒤 배열 2. 1을 구하기 위해 필요한 것 # callings의 원소마다 players의 해당하는 값을 옮기기 # calling과 동일한 players의 원소와 그 앞의 원소 위치변경 # swap을 통해 바꾸기 3. 그 외 고려해야 할 사항 # 5 ≤ players의 길이 ≤ 50,000 # 2 ≤ callings의 길이 ≤ 1,000,000 # callings안에서 players.index()를 한번만 호출해도 500억번 연산을 시작 # players를 딕셔너리로 바꿔서 시간 복잡도 줄이기 1. players를 index와 함께 딕셔너리에 enumerate를 사용해 넣는다. 2. callings의 i에 해당하는 값을 딕셔너리에서 찾아서 변.. 2023. 5. 4.
[알고리즘] 프로그래머스 - 연속된 수의 합 연속된 수의 합 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 구해야 하는 것 # 더해서 total이 되는 연속된 수들의 배열 2. 1을 구하기 위해 필요한 것 # 기준이 되는 배열의 가운데 수 # 가운데 수를 기준으로 몇개의 수를 넣어야할지 3. 그 외 고려사항 # 짝수일 때는 배열의 가운데 수 2개 중 더 작은 수가 구해짐 처음에 2로 나눈 나머지를 통해 홀수인지 짝수인지 판별, 홀수라면 중간값을 기준으로 num//2을 뺀 부분에서 더한 부분 +1까지, 짝수라면 중간값이 2개 중 왼쪽 수 이므로 시작 부분에 1을 더해준다 if num % 2 ==.. 2023. 5. 4.
[알고리즘] 프로그래머스 - 부족한 금액 계산하기 부족한 금액 계산하기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 구해야 하는 것 # 금액이 얼마나 모자란지 (아니면 0 반환) 2. 1을 구하기 위해 필요한 것 # 놀이기구를 count번 탔을 때 비용의 합 # for i in range(1, count+1) # cost에 i*price를 계속 더해주기 # money에서 cost를 뺀다 1부터 count까지 i와 price를 곱해 해당 회차의 가격을 구하고, 구한 가격을 모두 더해준다. 그 후 가진 돈에서 빼서 얼마가 모자란지 계산, 부족한지 여부에 따라 0또는 answer를 리턴 def solu.. 2023. 5. 4.
[알고리즘] 프로그래머스 - 약수의 개수와 덧셈 약수의 개수와 덧셈 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 구해야 하는 것 # l부터 r까지 (약수의 개수가 짝수인 수의 합) - (약수의 개수가 홀수인 수의 합) # for i in range) 2. 1을 구하기 위해 필요한 것 # 약수의 개수가 짝수인지 홀수인지 판별 # 해당 수의 약수의 개수 # for문으로 a%b == 0인 약수 개수를 세기? # 약수의 개수를 저장한 자료형 # 1. 딕셔너리? # 2. cnt = 0? # if 약수의 개수 % 2 == 0: 짝수 # else: 홀수 3. 그 외 고려사항 # 약수의 개수는 기본적으로 1:.. 2023. 5. 4.
[알고리즘] 프로그래머스 - 내적 내적 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 구해야 하는 것 # a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 2. 1을 구하기 위해 필요한 것 # 배열의 길이 # len() # for문 0부터 배열의 길이만큼 answer에 a[i]*b[i]를 더해줬다. def solution(a, b): answer = 0 for i in range(len(a)): answer += a[i]*b[i] return answer sum()과 리스트 컴프리헨션으로 축약한 코드 def solution(a, b): return sum.. 2023. 5. 4.
[알고리즘] 프로그래머스 - 행렬의 덧셈 행렬의 덧셈 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 구해야 하는 것 # 두 행렬의 같은 행, 같은 열의 값을 서로 더한 행렬 2. 1을 구하기 위해 필요한 것 # 각각의 행과 열의 길이 # len() # 각각 더하는 방법 # for문 행의 개수만큼 빈리스트 추가, 0부터 row의 개수까지 각각의 값들을 더해서 위에 만든 리스트에 추가 def solution(arr1, arr2): answer = [] for i in range(len(arr1)): answer.append([]) for j in range(len(arr1[0])): answe.. 2023. 5. 4.