목록Activity/Algorithm (13)
데이터 꿈나무
기록해두면 좋을 알고리즘 문제를 회고하면서, 더 기억에 담고자 글을 작성하게 되었습니다.😊회고 및 느낀점금방 풀 수 있을 것 같다고 느껴졌는데, 고민하는데 시간이 조금 더 걸렸다. 배열 a와 배열 b가 처음부터 같은 리스트일 수도 있다. 이것이 나중에 생각이 나서 맨 앞쪽에 추가했다.마지막 원소부터 인덱스 1의 원소까지 반복문을 돌려야 하는 문제였다.그리고 최댓값의 인덱스를 구했어야 했다. '리스트.index(값)' 으로 구해야 하는 것도 생각이 나지 않아, 방법을 검색해봤다.처음에는 인덱스로만 값을 비교(현재 원소가 인덱스와 같은지 비교)하는 것을 활용하지 않았었다.그러다가 생각이 꼬여서 다시 처음부터 생각했다. 그랬더니 이런 방법으로 풀면 됐었구나..! 라는 것을 깨달았다. 'a[last], a[m..
KT_Aivle School의 코딩마스터스가 시작되었다! 기록해두면 좋을 문제들은 기록해두고자 글을 작성하게 되었다.코드 자세한 설명은 주석을 달아놓았으니 참고하면 되겠다..!! 문제 설명 두정동에는 N개의 아파트 단지가 일직선상에 존재합니다. 각 아파트 단지에는 1번부터 N번까지 번호가 붙어있습니다. 두정동 동사무소에서는 아파트 단지 중 한 곳에 분리수거장을 지으려고 합니다. 분리수거장으로부터 각 주민들까지의 거리의 합이 최소가 되도록 하려면 어떤 아파트 단지에 분리수거장을 지어야 하는지 구하세요. 분리수거장으로부터 어떤 주민까지의 거리는 분리수거장이 있는 아파트 단지의 위치와 해당 주민이 거주하는 아파트 단지의 위치의 차로 계산됩니다. 단, 조건을 만족하는 아파트 단지가 여러개일 경우, 더 작은 번..

정렬 문제인데, 메모리 제한이 있어서 시간이 꽤 걸린 문제였다.무려 '네 번째 시도'만에 성공한 문제. (정답은 아래 '네 번째 시도'에 있습니다.) 📌 첫 번째 시도처음에는 아래와 같이 리스트에 입력값을 모두 담아서 sort를 하려고 했으니 메모리 초과가 나타났다.x = []n = int(input())for _ in range(n): a = int(input()) x.append(a) x.sort()for j in x: print(j) 📌 두 번째 시도조금 더 속도가 빠른 정렬을 찾아보다가 퀵정렬을 사용해봐도 되겠다라는 생각이 들어서, 함수를 구현하고 적용을 시켜보았다.그러나 역시나 메모리 초과.# 퀵 정렬 함수def quick_sort(arr): if len(a..

입력 조건- 첫째 줄에 공간의 크기를 나타내는 n이 주어진다. (1 - 둘째 줄에 여행가 A가 이동할 계획서 내용이 주어진다. (1 출력 조건첫째 줄에 여행가 A가 최종적으로 도착할 지점의 좌표 (X, Y)를 공백으로 구분하여 출력한다. 입력 예시 5R R R U D D출력 예시3 4 L: 왼쪽으로 한 칸 이동R: 오른쪽으로 한 칸 이동U: 위로 한 칸 이동D: 아래로 한 칸 이동 작성한 코드n = int(input())plans = input().split()x, y = 1,1# 'L','R','U','D'에 따른 이동 방향dx = [0,0,-1,1]dy = [-1,1,0,0]move_type = ['L','R','U','D']for plan in plans: # plan 하나당, f..
안녕하세요~ 이번 포스팅은 오랜만에 프로그래머스 문제 풀이를 해보려고 해요~! 재밌게 봐주세요:) 📌 문제 설명 1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다. 1-1. 입력된 수가 짝수라면 2로 나눕니다. 1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. 예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경..

📌 문제 📌 코드 def solution(numbers): answer = 0 numbers.sort(reverse = True) return max(numbers[0]*numbers[1], numbers[-1]*numbers[-2]) sort 함수로 오름차순 정렬해준 뒤, reverse =True를 하여 내림차순 정렬해줍니다. (reverse 과정은 해주지 않아도 결과가 같습니다.) 그리고 이렇게 정렬해준 것의 앞에서 1,2번째와 뒤에서 1,2번째를 곱한 값이 최댓값이 될 후보들이기 때문에 이 두 값 중에서 max 함수로 감싸 최댓값을 출력해줍니다.

📌 문제 📌 코드 def solution(cipher, code): answer = '' for i in range(code-1, len(cipher), code): answer += cipher[i] return answer for문을 이용해서 code-1부터 cipher의 개수까지 code수만큼 띄어서 반복문이 진행되도록 했다. 차례로 i에 들어가게 된다. 여기에서 code에 -1을 해준 이유는, 인덱스가 0부터 시작되기 때문이다. 따라서 code가 4일 경우, i에는 차례대로 3번 인덱스(4번째), 7번 인덱스(8번째), 11번 인덱스(12번째), ....이렇게 진행되는 것이다. 결과적으로 cipher의 4(code)의 배수 인덱스가 빈 문자열인 answer에 들어가게 되고, 그에 해당되는 문자열이..

📌 문제 📌 코드 def solution(my_string): answer = '' collection = ("a,e,i,o,u") for i in my_string: if i not in collection: answer += i return answer 이 방법은 모음이 아닌 문자를 판별해서 빈 문자열인 answer에 추가해주는 방법입니다. 우선 모음을 collection에 저장해둔 뒤 for 문을 이용하여 각 문자열을 i에 저장해줍니다. if문을 이용하여 collection에 i가 없을 경우, i를 answer에 반복문을 통해 차례대로 추가해줍니다. 📌 다른 풀이 def solution(my_string): collection = ("a,e,i,o,u") for i in collection: my_..
문제 설명 외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요. 제한사항 중복된 원소는 없습니다. 1 ≤ emergency의 길이 ≤ 10 1 ≤ emergency의 원소 ≤ 100 입출력 예 emergency result [3, 76, 24] [3, 1, 2] [1, 2, 3, 4, 5, 6, 7] [7, 6, 5, 4, 3, 2, 1] [30, 10, 23, 6, 100] [2, 4, 3, 5, 1] 입출력 예 설명 입출력 예 #1 emergency가 [3, 76, 24]이므로 응급도의 크기 순서대로 번호를 매긴 [..
문제설명 한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다. 한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요..