본문 바로가기

Algorithm/프로그래머스 연습 문제

(53)
프로그래머스 / 코딩 테스트 / 크레인 인형뽑기 게임 문제 설명 문제 해결 사라진 인형의 개수를 반환해야하는 문제이다. 일단 입출력 예부터 살펴보자. move를 이용해서 몇 번째 행의 인형을 크레인으로 뽑을 지 결정해야 한다. i를 이용해서 행을 아래 방향으로 순차적으로 참조해야 한다. (인형이 0이면 아무것도 안하고 넘어가므로) 인형을 뽑아주는 코드는 다음과 같이 작성할 수 있다. def drawToy(board, moves): bucket = [] for move in moves: cond = True for i in range(len(board)): if cond: if board[i][move-1] == 0: pass else: bucket.append(board[i][move-1]) board[i][move-1] = 0 cond = False py..
프로그래머스 / 코딩 테스트 / 소수 찾기 문제 설명 문제 해결 소수를 구하는 방법으로 에라토스테네스의 체를 찾았다. 에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 수학에서 에라토스테네스의 체는 소수를 찾는 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다. 알고리즘[편집] 2 ko.wikipedia.org 2부터 입력받은 숫자, n까지 숫자들이 소수인지 검증한다. 위키독스 온라인 책을 제작 공유하는 플랫폼 서비스 wikidocs.net def solve(n): a = [False,False] + [True]*(n-1) primes=[] for i in range(2,n+1): if a[i]: primes.append(i) for j in range(2*i, n+1,..
프로그래머스 / 코딩 테스트 / 서울에서 김서방 찾기 문제 설명 문제 해결 문자열 리스트에 "Kim"이라는 문자열이 어디에 위치해 있는지 찾아내면 된다. index 함수를 이용하여 위치를 반환하도록 만들었다. def solve(seoul): return "김서방은 " + str(seoul.index('Kim')) + "에 있다" def solution(seoul): answer = solve(seoul) return answer
프로그래머스 / 코딩 테스트 / 문자열 다루기 기본 문제 설명 문제 해결 and, or 연산자를 이용해서 여러 개의 조건을 비교하는 형태의 코드를 작성하면 된다. def solve(s): return (len(s) == 4 or len(s) == 6) and s.isdigit() def solution(s): answer = solve(s) return answer
프로그래머스 / 코딩 테스트 / 문자열 내림차순으로 배치하기 문제 설명 문제 해결 string 자료형도 iterable 객체이다. 위키독스 온라인 책을 제작 공유하는 플랫폼 서비스 wikidocs.net sorted 함수를 이용하여 정렬할 수 있다. reverse 인자값에 True를 주고 정렬하고 join으로 list 안의 문자들을 문자열로 모아준다. def solve(s): return ''.join(sorted(s,reverse=True)) def solution(s): answer = solve(s) return answer
프로그래머스 / 코딩 테스트 / 문자열 내 p와 y의 개수 문제 설명 문제 해결 lower 함수를 이용하여 문자열에서 대문자를 모두 소문자로 바꿔준다. count 함수를 이용하여 문자열에 특정 문자가 몇 개인지 정보를 얻는다. 정보를 비교하여 결과를 반환한다. def solve(s): return s.lower().count('p') == s.lower().count('y') def solution(s): answer = solve(s) return answer
프로그래머스 / 코딩 테스트 / 문자열 내 마음대로 정렬하기 문제 설명 문제 해결 입출력 예2에서 문자열 리스트를 한 번 정렬해야한다는 힌트를 얻을 수 있다. 나머지는 lambda와 sorted 함수를 응용해서 코드를 작성하면 쉽게 풀 수 있다. 위키독스 온라인 책을 제작 공유하는 플랫폼 서비스 wikidocs.net def solve(strings, n): return sorted(sorted(strings), key=lambda x : x[n]) def solution(strings, n): answer = solve(strings, n) return answer
프로그래머스 / 코딩 테스트 / 두 정수 사이의 합 문제 설명 문제 해결 comprehension과 ternary operator를 이용하여 코드를 짧게 줄였다. (가독성이 많이 떨어진다.) def solve(start, end): return sum([x for x in range(start, end+1)] if start < end else [x for x in range(end, start+1)]) def solution(a, b): answer = solve(a,b) return answer 다른 사람의 풀이 min, max 내장 함수를 이용하여 코드의 가독성을 끌어올렸다. 위키독스 온라인 책을 제작 공유하는 플랫폼 서비스 wikidocs.net (이쯤 보면 코딩도 예술이다.) def solve(start, end): return sum([x fo..
프로그래머스 / 코딩 테스트 / 나누어 떨어지는 숫자 배열 문제 설명 문제 해결 리스트의 각 원소를 divisor로 나머지 연산한 값이 0인지 확인하고 원소들을 다시 모아 리스트를 구성하면 된다. comprehension 기법으로 리스트를 재구성해주고 sorted 함수를 이용하여 오름차순으로 정렬해줬다. 재구성한 리스트의 길이가 0일 경우 나누어 떨어지는 원소가 없다는 것이므로 [-1]을 반환한다. def solve(arr, divisor): res = sorted([x for x in arr if x % divisor == 0]) return res if len(res) != 0 else [-1] def solution(arr, divisor): answer = solve(arr,divisor) return answer
프로그래머스 / 코딩 테스트 / 같은 숫자는 싫어 문제 설명 문제 해결 연속적으로 나타나는 원소를 제거한 리스트를 반환해야하는 문제이다. 현재 원소 x와 이전 원소 prev를 지정하여 비교하는 방법으로 문제를 풀었다. prev와 x가 다르면 res에다가 x를 추가하는 방식이다. def solve(arr): prev = arr[0] res = [prev] for x in arr : if prev != x: res.append(x) prev = x return res def solution(arr): answer = solve(arr) return answer