본문 바로가기

알고리즘 & 코딩테스트/코딩테스트

(45)
Programmers Lv.1 "이상한 문자 만들기" 주어진 문자열을 공백 기준으로 각각의 원소로 생각하고, 각 원소들에 대하여 index의 홀짝 여부를 판단하여 요소들을 알맞게 리턴해주면 된다. 음.. 뭔가 말이 이상한것 같은데 코드를 보면 바로 이해할 수 있을 것이다. 반환할 때 요구하는 형태와 맞는지 꼭 체크하자! def solution(s): answer = "" target = s.split(" ") for elem in target: for idx, char in enumerate(elem): if idx%2==0: answer += char.upper() else: answer += char.lower() answer += " " return answer[:-1]
Programmers Lv. 1 "3진법 뒤집기" 가끔 나오는 '진법 변환'과 문자열 뒤집기가 응용된 문제이다. 문자열 뒤집기는 말 그대로 주어진 문자열을 역순으로 뒤집으면 되서 큰 문제가 되지 않는다. 우리가 눈여겨봐야할 것은 진법 변환에 대한 내용이다. 요것도 자세한 내용은 알고리즘 카테고리의 "진법변환"에서 다룰예정이니 참고해보라. 파이썬에는 아쉽게도 10진수 숫자를 2, 8, 16진수로 표현하는 것 이외의 진법으로 표현하는것엔 달리 방법이 없다. 즉, 직접 구현해야 한다는 말이므로 원리 그대로 진행하자. import string def solution(n): def convert(num, base): tmp = string.digits + string.ascii_lowercase q, r = divmod(num, base) if q==0: ret..
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)