https://code-challenge.elice.io/courses/282926/lectures/2455429/lecturepages/21567980/ 알고리즘 문제집 | 엘리스 코드 챌린지 code-challenge.elice.ioDay 1 💡 풀이 과정최대 6자리이기 때문에 완전 탐색으로도 가능하다. 가장 뒤에서부터 오름차순 상태인 두 숫자를 찾는다.해당 숫자를 발견하면 큰 수를 작은 수 위치로 이동시키고,뒷 부분에 대해서는 오름차순으로 정렬한다. 예시364[6, 4] 비교[3, 4] 비교 -> (3 463 -> 436555472[7, 2], [4, 2][4, 7] 에서 오름차순 발견555742 -> 555724N 보다 큰 수 중에서 가장 작아야하기 때문에 가장 작은 자리 수부터 바꿨을 때 N ..
Algorithm
💡 풀이 과정해당 문제는 점화식을 세울 수 있기에 DP 문제로 볼 수 있다.i + 1 번째를 타일로 채울 수 있는 방법은 위에 삼각형이 있냐 없냐에 따라 또 다르다.삼각형이 있는 경우i 번째 경우의 수 * 삼각형 3개로 이루어진 마름모를 채울 경우의 수i 번째에서 가장 오른쪽 삼각형이 없을 때의 경우의 수 * 삼각형 4개로 이루어진 정삼각형을 채울 경우의 수두 경우가 겹치는 경우는 사이의 작은 삼각형이 정삼각형 타일로 이루어진 경우i 번째에서 가장 오른쪽 삼각형이 없을 때의 경우의 수 * 삼각형 3개로 이루어진 마름모를 채울 경우의 수총 경우의 수를 계산하자면dp[i][0] * 3 + dp[i][1] * 4 - dp[i][1] * 3삼각형이 있는 경우와 없는 경우, 가장 오른쪽 삼각형이 채워진 경우 없..
📚 문제Level 3💡 풀이 과정...📌포인트...💻 코드def solution(coin, cards): n = len(cards) hands = cards[:int(n / 3)] card_index = int(n / 3) need_cards = [] pair = 0 for card1 in hands: if n + 1 - card1 not in hands: need_cards.append(n + 1 - card1) else: pair += 1 pair = pair // 2 sub_cards = [card for card in cards[card_index: card_index + 2 * (p..
💡 풀이 과정모든 조합을 빠짐없이 완전 탐색하는 문제이다.먼저 combination 을 사용해서 주사위를 사용할 수 있는 모든 조합을 result 에 생성한다.해당 조합은 [[[0,1], [2,3]], ... ] 이런 식으로 담겨있다.첫 번째는 1, 2 번째 주사위와 2, 3 번째 주사위를 비교한다는 뜻이다.해당 result 에 있는 조합 주사위에서 나올 수 있는 합과 경우의 수를 구한다.product 를 사용해 모든 조합을 구하고 sum 을 사용해 합을 구한다.Counter 를 사용해서 sum 을 카운팅해 중복을 없앤다.{6: 6, 7 : 10, ...} 이런 식으로 표현된다.이는 주사위의 조합에서 6이 나오는 경우는 6가지, 7이 나오는 경우는 10가지임을 나타낸다.이후 조합 sub1, sub2 에..
📚 문제Level 2💡 풀이 과정간선들을 일단 모두 dictionary 에 저장한다.만약 한 정점에서 뻗어나가는 간선의 개수가 3개 이상이라면 해당 정점이 무조건 생성된 정점이다!이는 일반적인 도넛, 막대, 8자 모양의 그래프 중에서 어떤 정점들도 3개 이상의 출발 간선을 가지지 못한다는 것이다.3개 이상의 "출발" 간선을 가지지 못함에 주의하자. "도착" 간선은 3개 이상 가질 수 있다.또한 한 정점에서 아래와 같은 기준으로 그래프를 판단할 수 있다.막대 모양 그래프한 정점에서 다음 정점으로 계속해서 이동할 때 더 이상 이동할 수 없는 정점이 존재한다면 막대 모양이다.8자 모양 그래프한 정점에서 다음 정점으로 계속해서 이동 중 출발 간선의 개수가 2개가 존재한다면 해당 그래프는 8자 모양이다.도넛 ..
📚 문제Level 1조건 확인만 잘하고 구현만 잘하면 되는 문제💡 풀이 과정N * N gift_score[][]행렬을 생성한다.gift_score[giveIndex][takeIndex] 로 주고받은 선물과 선물 지수를 표로 나타낸다. total_score[] 에 총 선물 지수를 담아낸다.gift_score[][] 를 돌면서 주고받은 기록이 없거나 같은 수라면 선물 지수에 따라 선물을 주고 받는다.선물을 주고 받았다면 더 많은 선물을 준 사람이 선물을 받는다.📌포인트💻 코드def solution(friends, gifts): n = len(friends) gift_score = [[0 for _ in range(n)] for _ in range(n)] for gift in gifts..
📚 문제Lv 2연속된 부분 수열의 합을 찾아가는 과정과 동일하다.목표값을 계산하고 하나의 큐를 선택한다.큐의 총 합이 목표값보다 작으면 push 하고 목표값보다 크면 deque 한다큐의 길이가 💡 풀이 과정총 합의 절반을 목표값으로 정한다. q1 의 총 합이 목표값보다 작으면 append 하고 목표값보다 크면 popleft 한다.💻 코드from collections import dequedef solution(queue1, queue2): q1 = deque(queue1) q2 = deque(queue2) sum = 0 for q in queue1: sum += q q1_sum = sum for q in queue2: sum += q s..
1일 1PS 35일차!📚 문제Lv 1MBTI 처럼 각 유형에 대한 질문이 정해져있고 질문에 대한 답으로 유형에 대해서 +- 계산해 판단할 수 있다.예를 들어 AN 에서 1을 골랐다면 N 형에 3점을 주고 NA 에서 1번을 골랐다면 A 형에 2점을 주는 것을 (+3) + (-2) 로 AN 의 유형이 양수이므로 N 형으로 판단하는 것이다.💡 풀이과정survey 가 어떤 유형에 속하는 지, 또한 정방향 유형인지 판단한다.유형값을 저장하는 ch 배열에 응답값들을 더한다.총 합이 양수인지 음수인지 판단해 유형값을 출력한다.💻 코드def solution(survey, choices): answer = "" # RT, CF, JM, AN form = ['RT', 'CF', 'JM', 'AN'] ..