본문 바로가기

알고리즘 & 코딩테스트

(48)
Programmers Lv.1 "같은 숫자는 싫어" 주어진 배열에서 연속적으로 나타나는 숫자를 하나만 남기고 다 지우는것이 포인트이다. 위의 말과 조건을 생각해보면 한마디로 순서를 유지한 채 중복된 요소를 모두 검열하라는 것과 같은 말이다. 필자는 주어진 arr의 첫번째 요소를 tmp에 담고, arr를 순회하면서 중복된 요소가 아닌것들만 tmp에 차례대로 append한 뒤 tmp를 반환해주었다. def solution(arr): tmp = [arr[0]] for i in range(1,len(arr)): if arr[i]!=arr[i-1]: tmp.append(arr[i]) return tmp
Programmers Lv. 1 "최대공약수와 최소공배수" 드디어 직접적인 내용이 문제로도 보인다. 이전 포스팅에서 간간히 약수, 배수와 관련된 내용을 많이 얘기했었는데 이에 대한 가장 직접적인 문제라고 생각한다. 내용은 심플하다. 말 그대로 최대공약수와 최소공배수를 구해서 하나의 리스트에 담아 리턴하면 된다. 알고리즘 카테고리의 "약수/배수와 GCD, LCM"를 참고하자. def solution(a, b): x,y = a,b z = x%y while z>0: x,y=y,z z=x%y g=y return [g, a/g*b]
Programmers Lv. 1 "직사각형 별찍기" 음.. 설명이 딱히 필요하지 않은 문제인것 같다. 그냥 n x m 크기의 별을 찍으면 되는 문제이다. a, b = map(int, input().strip().split(' ')) for _ in range(b): print("*"*a)
Programmers Lv.1 "행렬의 덧셈" 행렬의 덧셈은 크게 2가지 방식으로 풀이할 수있다. 바로 numpy 라이브러리를 활용하는 방식과 행렬의 덧셈구조를 그대로 구현하는 방식이다. 아래 방식은 numpy 라이브러리를 이용하는 방식이다. import numpy as np def solution(arr1, arr2): arr1 = np.array(arr1) arr2 = np.array(arr2) answer = arr1+arr2 return answer.tolist() 이제 행렬의 덧셈을 그대로 구현한 방식을 알아보자. 행렬의 덧셈은 행렬의 각 행,열에 해당하는 위치를 그대로 유지한채 각 값을 더해주면 된다. def solution(arr1, arr2): answer = [] for i in range(len(arr1)): temp=[] for ..
Programmers Lv.1 "문자열 다루기 기본" 2가지 조건에 대해 검수한 후 조건에 부합하면 알맞는 값은 반환하면 된다. 조건도 그리 어렵지 않은데, 문자열의 길이가 4 혹은 6이어야 하고 동시에 숫자로만 구성되어 있는지 체크해야 한다. 문자열의 길이는 len()를 사용하면 되고, 숫자로만 구성함을 판단할 땐 isdecimal()을 사용하면 된다. def solution(s): if len(s)==4 or len(s)==6: answer = True if s.isdecimal() else False return answer else: return False