2016년
내 코드
def solution(a, b):
answer = None
weeks = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]
if a == 1:
b = b + 4
i = b % 7
answer = weeks[i]
elif a == 2:
i = b % 7
answer = weeks[i]
elif a == 3:
b = b + 1
i = b % 7
answer = weeks[i]
elif a == 4:
b = b + 4
i = b % 7
answer = weeks[i]
elif a == 5:
b = b + 6
i = b % 7
answer = weeks[i]
elif a == 6:
b = b + 2
i = b % 7
answer = weeks[i]
elif a == 7:
b = b + 4
i = b % 7
answer = weeks[i]
elif a == 8:
i = b % 7
answer = weeks[i]
elif a == 9:
b = b + 3
i = b % 7
answer = weeks[i]
elif a == 10:
b = b + 5
i = b % 7
answer = weeks[i]
elif a == 11:
b = b + 1
i = b % 7
answer = weeks[i]
elif a == 12:
b = b + 3
i = b % 7
answer = weeks[i]
return answer
다른 사람의 풀이
def solution(a,b):
months = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
days = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU']
return days[(sum(months[:a-1])+b-1)%7]
- sum(): 괄호 안에 숫자로 이루어진 list를 넣으면 해당 list의 원소들의 합을 구할 수 있다.
가운데 글자 가져오기
내 코드
def solution(s):
if len(s)%2 == 0:
i = len(s)//2
answer = s[i-1]+s[i]
else:
i = len(s)//2
answer = s[i]
return answer
다른 사람의 풀이
def solution(str):
return str[(len(str)-1)//2:len(str)//2+1]
- 내가 짠 코드와 달리 주어진 문자열의 길이가 짝수이든 홀수이든 상관없이 주어진 조건을 만족하고 문제를 풀 수 있다. 슬라이싱 개념에 대한 이해가 필요하다.
같은 숫자는 싫어
내 코드
def solution(arr):
k = []
for i in range(len(arr)):
if i > 0:
if arr[i-1] != arr[i]:
k.append(arr[i])
elif arr[i-1] == arr[i]:
continue
else:
k.append(arr[i])
return k
다른 사람의 풀이
def solution(s):
a = []
for i in s:
if a[-1:] == [i]: continue
a.append(i)
return a
- a[-1:]은 첫 for문이 돌아갈 때 빈 배열일 경우도 문제 없이 작동한다. 슬라이싱을 알면 많은 것이 편해진다. 또한 연속되는 수만 제거하면 되기 때문에 마지막에 append된 수랑만 비교하면 된다. list의 index에 -1을 넣으면 가장 마지막에 append된 수를 반환한다.
나누어 떨어지는 숫자 배열
내 코드
def solution(arr, divisor):
newArr = []
for i in arr:
if i % divisor == 0:
newArr.append(i)
if newArr == []:
newArr.append(-1)
newArr.sort()
answer = newArr
return answer
다른 사람의 풀이
def solution(arr, divisor): return sorted([n for n in arr if n%divisor == 0]) or [-1]
- sorted는 정렬된 값을 반환해주고 .sort()는 값을 반환해주지 않기 때문에 None이 된다. 즉 두 가지 모두 정렬은 하지만 값의 반환여부에 대한 차이가 존재한다.
두 정수 사이의 합
내 코드
def solution(a, b):
if a == b:
answer = a
elif a < b:
i = b-a
sum = 0
for j in range(i+1):
set = a + j
sum = sum + set
answer = sum
elif a > b:
i = a-b
sum = 0
for j in range(i+1):
set = b + j
sum = sum + set
answer = sum
return answer
다른 사람의 풀이
def solution(a, b):
return sum(range(min(a,b),max(a,b)+1))
- min()은 두 값 중 작은 값, max()는 두 값 중 큰 값을 반환한다. 안에 여러 수가 들어간다면 각각 최솟값과 최댓값을 반환한다.
문자열 내 마음대로 정렬하기
내 코드
def solution(strings, n):
sortList = []
for i in range(len(strings)):
sortList.append((strings[i][n], strings[i]))
sortList.sort()
ansList = []
for i in range(len(strings)):
ansList.append(sortList[i][1])
answer = ansList
return answer
다른 사람의 풀이
def solution(strings, n):
return sorted(strings, key=lambda x: x[n])
- 람다 표현식은 'lambda 인자: 표현식'의 형식으로 쓰이고 표현식에 해당하는 값을 반환한다고 생각하면 편하다. 여기서는 sorted의 key로 strings의 인덱스 n에 해당하는 값을 준다.
- sorted()는 정렬할 때 key를 따로 설정 가능하다는 점을 기억하자.
문자열 내 p와 y의 개수
내 코드
def solution(s):
answer = True
pCount = 0
yCount = 0
n = s.lower()
for i in n:
if i == "p":
pCount += 1
elif i == "y":
yCount += 1
if pCount == yCount:
answer = True
elif pCount != yCount:
answer = False
elif pCount == 0 and yCount == 0:
answer = True
return answer
다른 사람의 풀이
def solution(s):
return s.lower().count('p') == s.lower().count('y')
- count()는 주어진 문자열에 대한 부분 문자열의 수를 반환하는 메소드이다.
문자열 내림차순으로 배치하기
내 코드
def solution(s):
str = []
k = ""
for i in s:
str.append(i)
str.sort()
str.reverse()
for i in str:
k = k + i
answer = k
return answer
다른 사람의 풀이
def solution(s):
return ''.join(sorted(s, reverse=True))
- join()은 .앞에 주어진 문자열과 괄호 안의 것을 하나씩 꺼내서 합쳐준다. 즉 .앞에 공백이 아닌 다른 문자가 있는 경우 s에 담긴 것 하나마다 붙게 된다. 즉 괄호 안에 list가 있다고 생각하면 이해하기 편하다.
- list()는 괄호 안에 문자열을 넣으면 문자 각각 하나를 원소로 하는 list를 반환한다. (다른 풀이에서 본 것 정리)
문자열 다루기 기본
내 코드
def solution(s):
answer = True
if len(s) == 4 or len(s) == 6:
try:
k = int(s)
answer = True
except:
answer = False
else:
answer = False
return answer
다른 사람의 풀이
def solution(s):
return s.isdigit() and len(s) in (4, 6)
- isdigit()은 문자열이 숫자인지 판단해주는 것으로 이와 반대로 isalpha()는 문자열이 문자인지 아닌지를 판단해준다.
- in 연산자는 논리 연산자로 사용 가능하다.
서울에서 김서방 찾기
내 코드
def solution(seoul):
i = 0
if len(seoul) >= 1 and len(seoul) <= 1000:
for i in range(len(seoul)):
if seoul[i] == "Kim":
break
i = str(i)
answer = "김서방은 "+ i + "에 있다"
return answer
다른 사람의 풀이
def solution(seoul):
return "김서방은 {}에 있다".format(seoul.index('Kim'))
- format()은 포맷팅과 유사한 방식으로 {}안에 format()의 괄호 안의 값을 넣어서 출력하는 방식이다. {}를 여러 개 사용하고 괄호 안에 같은 수의 값을 주면 차례로 {}에 들어가 출력한다. {}안에 index를 집어 넣어 순서를 지정할 수도 있다.
- index()는 해당 원소의 위치를 반환한다. 즉 index값을 반환한다.