
[파이썬] 프로그래머스 64061(크레인 인형뽑기 게임)
2022. 1. 19. 18:55
Algorithm
📌 풀이 스택을 이용해서 풀었다. 스택이란 책 쌓기를 생각하면 된다. 가장 먼저 들어온 것이 가장 아래 쌓이고 가장 늦게 들어온 것이 가장 위에 쌓여 pop 즉 빼낼 때 가장 먼저 나가게 되는 Last In First Out(LIFO) 형태이다. 2차원 배열을 활용하여 윗줄부터 move 즉 뽑기 기계의 위치에서 하나씩 내려가며 0이 아닌 즉 인형이 있을 때 basket 안에 차례차례 인형을 넣고 2개의 인형이 중복된다면 del basket [-2], del basket [-1]을 통해 마지막 2개를 지워주고 answer를 2개 늘려준다. 풀이 코드 def solution(board, moves): basket = [] answer = 0 for move in moves: for column in boar..

[코틀린] 프로그래머스 42840(모의고사)
2022. 1. 19. 18:37
Algorithm
📌 풀이 우선 플레이어 1, 2, 3의 찍기 패턴을 등록한다. 그리고 추후 점수를 기록할 scores도 IntArray로 초기화해 놓는다. 파이썬의 enumerate의 기능을 하는 withIndex와 나머지공식을 사용해 점수 배열과 플레이어의 패턴을 비교해 같을 경우 score에 1씩 더해준다. 마지막에 scores를 똑같이 withIndex로 for문을 돌려놓고 max인 값과 비교해 같다면 해당 자리의 인덱스를 result에 넣어 정답을 구하면 된다. 근데 여기서 문제가 하나 있었는데 프로그래머스의 코틀린 컴파일 버전에서 maxOrNull을 지원하지 않았다. 따라서 제출 할때는 java의 컬렉션을 불러와 새롭게 max를 지정해 제출했다. 코드 1 (프로그래머스에서는 에러) class Solution {..

[파이썬] 프로그래머스 42840(모의고사)
2022. 1. 19. 18:26
Algorithm
📖 풀이 우선 규칙을 나타내는 리스트들을 나열하고 그것을 answers와 비교해 1, 2, 3번 플레이어의 count를 하나씩 올려주었다. 그다음 이 3개의 count 중 max 값을 answer에 넣어주고 sort 해주어 문제를 풀었다. 하나하나 하드 코딩해서 코드가 매우 길다 def solution(answers): answer = [] length = len(answers) temp2 = [2, 1, 2, 3, 2, 4, 2, 5] temp3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] a = [] b = [] c = [] for i in range(length): a.append(i % 5 + 1) for i in range(length): if (i % 2) == 0: b.appe..

백준 알고리즘 파이썬(Python) 1009번 분산처리
2022. 1. 5. 22:30
Algorithm
❌ 풀이 1 (시간 초과 실패) N = int(input()) for _ in range(N): a, b = map(int, input().split()) print((a ** b) % 10) 제곱의 수가 커질수록 수가 상상 이상으로 커져 시간 초과가 나오게 된다. 🙆♂️ 풀이 2 컴퓨터가 총 10대이고 하나하나 제곱하며 10으로 나눈것의 나머지의 규칙을 찾아보면 다음 표와 같이 나온다. 여기서 조심해야 될 부분은 끝자리가 0인 값의 제곱수들인데 0번 컴퓨터는 없으므로 해당 값들은 10번 컴퓨터가 출력되도록 코드를 짜주어야 한다. 각각의 경우를 if문을 통해 불필요한 계산을 줄여주어 시간초과를 피할 수 있었다. 풀이 코드 n = int(input()) arr = [] for i in range(n): ..

리트코드(LeetCode) 561번 배열 파티션(Array Partition)
2021. 9. 27. 16:07
Algorithm
📌 첫 번째 풀이 크게 어렵지 않은 문제이다. 우선 규칙을 확인해야 하는데 주어지는 수는 무조건 짝수이고 리스트를 오름차순으로 정렬한 뒤 2개씩 묶으면 왼쪽에 있는 숫자의 합을 구하면 된다. 예를 들어 [6, 2, 6, 5, 1, 2] 라면 정렬을 하면 [1, 2, 2, 5, 6, 6] 이 되고 이를 2개씩 묶으면 (1, 2), (2, 5), (6, 6) 이 되어 1+2+6 = 9 가 배열 파티션의 최댓값이 되는 것이다. 이를 위해 for 문의 range(x, y, z) 의 세 번째 파라미터 즉 z는 증분을 지정하는 파라미터라는 성질을 이용해 풀었다. nums를 정렬 한 뒤 홀 수 번째 있는 숫자들만 result에 담은 뒤 sum(result)를 해준다. 풀이 코드 class Solution: def a..