
[파이썬] 프로그래머스 - 위장
2022. 4. 7. 22:33
Algorithm
📌 풀이 약간의 수학적 사고를 해야 풀리는 문제이다. 우선 나는 딕셔너리의 성격과 수학의 경우의 수를 조합하여 문제를 풀었다. 우선 옷의 종류에 따라 몇 가지가 있는지 파악한다. answer = {} for cloth in clothes: if cloth[1] in answer: answer[cloth[1]] += 1 else: answer[cloth[1]] = 1 ... colthes = [["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]] 라면 answer = {'headgear': 2, 'eyewear': 1} 이제 각 옷의 종류의 개수를 알았으니 경우의 수를 이용하여 푼다. 이전에 입을 수 있..

[파이썬] 프로그래머스 - 전화번호 목록
2022. 4. 2. 22:43
Algorithm
📌 풀이 zip() 내장 함수 zip() 함수는 여러 개의 순회 가능한(iterable) 객체를 인자로 받고, 각 객체가 담고 있는 원소를 튜플의 형태로 차례로 접근할 수 있는 반복자(iterator)를 반환한다. numbers = [1, 2, 3] letters = ["A", "B", "C"] for pair in zip(numbers, letters): print(pair) ... (1, 'A') (2, 'B') (3, 'C') 위 코드를 보면 numbers 리스트와 letters 리스트를 zip() 함수에 인자로 넘겨서 호출 후에, for 문으로 zip() 함수의 반환값을 대상으로 루프를 돌면서 터플을 차례로 출력하고 있다. zip() 함수를 활용하면 여러 그룹의 데이터를 루프를 한 번만 돌면서 처..

리트코드(LeetCode) 344번 문자열 뒤집기
2022. 3. 28. 20:55
Algorithm
📌 풀이 1 (오답) class Solution: def reverseString(self, s: List[str]) -> None: left = 0 right = len(s) - 1 while left < right: s[left] = s[right] s[right] = s[left] left += 1 right -= 1 문제에서 '리턴 없이 리스트 내부를 직접 조작하라' 라는 제약사항이 있으므로 투 포인터를 이용해서 풀었다. 하지만 여기서 생각지 못한 오류가 있었는데 s[left] = s[right] s[right] = s[left] 해당 부분이 절차적으로 실행되면서 두 번째 줄이 실행 될 때는 이미 s[left]가 기존의 리스트와 달라져 있어 원하는 답이 나오지 않는 것이였다. 따라서 해당 부분을 ..

[파이썬] 프로그래머스 - 완주하지 못한 선수
2022. 3. 27. 22:04
Algorithm
📌 풀이 1 우선 정렬을 하면 비교가 되겠다고 생각했다. Participant와 Completion을 정렬하여 zip으로 묶어 for문으로 비교하여 만약 서로 다른 원소가 있다면 그 중 Participant에 있는 원소가 완주하지 못한 선수 이므로 해당 원소를 return해준다. 근데 여기서 한가지 조심해야 할 점이 있는데, Completion은 Participant보다 항상 길이가 1 적으므로 만약 완주하지 못한 선수가 정렬된 Participant의 가장 마지막에 있다면 for문이 돌아가지 않는 것이다. 나는 문제에 모든 참가자 이름은 소문자로 되어 있다는 조건을 보고 Completion의 마지막에 completion.append("A") 로 대문자를 추가해주는 (그 어떤 Participant와도 겹치..

[코틀린] 프로그래머스 64061(크레인 인형뽑기 게임)
2022. 1. 19. 19:01
Algorithm
📌 풀이 스택을 이용해서 풀었다. 스택이란 책 쌓기를 생각하면 된다. 가장 먼저 들어온 것이 가장 아래 쌓이고 가장 늦게 들어온 것이 가장 위에 쌓여 pop 즉 빼낼 때 가장 먼저 나가게 되는 Last In First Out(LIFO) 형태이다. 2차원 배열에서 하나씩 내려가면서 나오는 인형과 stack에 있는 인형을 비교해 만약 같다면 즉 (stack.peek() == board[i][it - 1])이라면 answer를 2개 늘려주고 stack의 인형을 pop 시켜주고 배열에서의 인형도 0 즉 인형을 없애준다. 풀이 코드 import java.util.* class Solution { fun solution(board: Array, moves: IntArray): Int { var answer = 0 ..