2021년 6월 14일
프로그래머스에서 푼 level1 10문제 모음집입니다.
문제 풀이에 대한 설명은 코드에 주석으로 표시하였습니다.
def solution(s):
# 첫 글자가 '-'부호가 아니면 바로 int(s) 리턴
# 첫 글자가 '-'부호이면 부호를 뺀 나머지 숫자 문자열을 정수형으로 바꾸고 -1 곱하기
return int(s) if s[0] != '-' else int(s[1:]) * (-1)
int(x = 0), int(x, base=10)
- 전달 받은 매개변수 x(문자열)를 정수형으로 바꾸어준다.
- 매개변수 base는 진법을 나타낸다. -> x를 base진법으로 읽어서 해당 숫자에 맞는 10진수로 변환해서 return
- x가 문자열일 때 부호도 알아서 인식해서 정수형으로 바꾸어준다.
print(int('150')) # 150 print(int('-150')) # -150 print(int('1111', 2)) # 15
def solution(s, n):
answer = []
# 소문자를 모두 담은 리스트
lower = [chr(a) for a in range(97, 123)]
# 대문자를 모두 담은 리스트
upper = [chr(a) for a in range(65, 91)]
for a in s:
# 소문자라면,
if a.islower():
# n만큼 밀었을 때 'z'를 넘어가는 경우
if 122 < ord(a) + n:
answer.append(lower[ord(a) + n - 123])
else:
answer.append(lower[ord(a) + n - 97])
# 대문자라면,
elif a.isupper():
# n만큼 밀었을 때 'Z'를 넘어가는 경우
if 90 < ord(a) + n:
answer.append(upper[ord(a) + n - 91])
else:
answer.append(upper[ord(a) + n - 65])
# 공백이라면,
elif a.isspace():
answer.append(' ')
# 리스트를 문자열로 만들어서 리턴
return ''.join(answer)
def solution(s, n):
answer = []
# 소문자를 모두 담은 리스트
lower = [chr(a) for a in range(97, 123)]
# 대문자를 모두 담은 리스트
upper = [chr(a) for a in range(65, 91)]
for a in s:
# 소문자라면,
if a.islower():
answer.append(lower[(ord(a) - ord('a') + n) % 26])
# 대문자라면,
elif a.isupper():
answer.append(upper[(ord(a) - ord('A') + n) % 26])
# 공백이라면,
elif a.isspace():
answer.append(' ')
# 리스트를 문자열로 만들어서 리턴
return ''.join(answer)
def solution(n):
answer = 0
# 1 ~ n까지
for i in range(1, n+1):
# n을 i로 나누었을 때 나누어 떨어지면 약수
if n % i == 0:
answer += i
return answer
def solution(s):
answer = ''
n = 0 # 단어별 인덱스 짝/홀수 판단을 위한 변수
for i in range(len(s)):
# 공백이면
if s[i].isspace():
answer += ' '
# 공백이 나왔으면 n을 초기화 시켜줘야한다.
# for문 마지막에 n += 1을 해주기 때문에 -1로 할당
n = -1
else:
# 단어 내에서 인덱스가 짝수인 경우
if n % 2 == 0:
answer += s[i].upper()
# 단어 내에서 인덱스가 홀수인 경우
else:
answer += s[i].lower()
n += 1
return answer
def toWeirdCase(s):
res = []
# 공백을 기준으로 단어별로 쪼개서 담은 리스트 순회
for x in s.split(' '):
word = '' # 공백이 연속으로 나오는 경우를 대비해서
for i in range(len(x)):
c = x[i].upper() if i % 2 == 0 else x[i].lower()
word = word + c
res.append(word)
return ' '.join(res)
💡 새로 알게된 split(' ')
- 만약 공백이 연속으로 나올 때 split(' ')은 문자열을 어떻게 인식할까
# 예시) s = 'a b' # a와 b사이에 공백 3개 print(s.split(' ')) # ['a', '', '', 'b']
- 문자열 s를 문자 'a',(공백),'', (공백),'',(공백), 'b'으로 이루어져있는 것으로 인식한다.
def solution(n):
answer = list(map(int,list(str(n))))
answer.reverse()
return answer
💡 reversed() vs. reverse()
- reversed()는 내장함수, reverse()는 list에서 제공하는 함수
- reversed()는 원본을 변경하지 않지만, reverse()는 list 원본을 변경한다.
- reversed()는 객체를 리턴하지만, reverse()는 아무것도 리턴하지 않는다.
def solution(arr1, arr2):
# 주어진 행렬의 행
N = len(arr1)
# 주어진 행렬의 열
M = len(arr1[0])
answer = [[] for _ in range(N)]
# 인덱스 i,j로 직접 요소에 접근해서 덧셈
for i in range(N):
for j in range(M):
answer[i].append(arr1[i][j] + arr2[i][j])
return answer
def sumMatrix(A,B):
answer = [[c + d for c, d in zip(a, b)] for a, b in zip(A,B)]
return answer
프로그래머스 level1 문제를 다 풀어보았다.
있는지도 몰랐던 새로운 메소드들도 많이 알게 되었고, 알고는 있었지만 숙지하지 못했던 메소드들을 다시금 머리에 새길 수 있는 좋은 시간이었다.