1.프로그래머스 입문 - 2차원으로 만들기
문제점
정수 배열 num_list와 정수 n이 매개변수로 주어집니다.
num_list를 다음 설명과 같이 2차원 배열로 바꿔 return하도록 solution 함수를 완성해주세요.
num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고
n이 2이므로 num_list를 2 * 4 배열로 다음과 같이 변경합니다.
2차원으로 바꿀 때에는 num_list의 원소들을 앞에서부터 n개씩 나눠 2차원 배열로 변경합니다.
# num_list를 n개씩 묶어서 answer로 return
시도해 본 것들
해결 방법
def solution(num_list, n):
# num_list를 n개씩 묶어서 answer로 return
# while문으로 num_list만큼 돌리고
# reverse() 쓰고
# for문으로 n만큼 pop()
# n만큼 진행되면 answer에 append()
answer = []
num_list.reverse()
while num_list:
sum_num = []
# n만큼 반복문 사용
for _ in range(n):
# 임시로 pop()한 list 모음
sum_num.append(num_list.pop())
# for문 탈출시 answer에 추가
answer.append(sum_num)
return answer
알게 된 점
while문의 기준을 list로 선언하고 pop()으로 조작하면 결국 마지막에 list가 False가 되면서 자연스럽게 while문을 탈출할 수 있다.
reverse()를 사용하면 sort(reverse=True)와 다르게 정렬없이 순서만 바꾼다는 것을 알게 되어 활용했다.
1.프로그래머스 입문 - 로그인 성공?
문제점
머쓱이는 프로그래머스에 로그인하려고 합니다.
머쓱이가 입력한 아이디와 패스워드가 담긴 배열 id_pw와 회원들의 정보가 담긴 2차원 배열 db가 주어질 때,
다음과 같이 로그인 성공, 실패에 따른 메시지를 return하도록 solution 함수를 완성해주세요.
시도해 본 것들
def solution2(id_pw, db):
answer = ''
for i in db:
# id가 있는 경우
if id_pw[0] in i[0]:
print(1)
else:
answer = 'wrong pw'
return answer
for문으로 db의 데이터에 접근하고 if와in으로 데이터 존재 여부 확인
def solution3(id_pw, db):
answer = ''
for i in db:
# 둘다 일치
if id_pw[0] in i[0] and id_pw[1] in i[1]:
answer = 'login'
# id만 일치
elif id_pw[0] in i[0]:
answer = 'wrong pw'
# 일치 X
else:
answer = 'fail'
return answer
정답률 60% 방향성이 상당히 어긋난 느낌
print()로 확인해본 결과 answer의 값이 계속해서 바뀜
def solution4(id_pw, db):
for i in db:
# 둘다 일치
if id_pw[0] in i[0] and id_pw[1] in i[1]:
return 'login'
for i in db:
# id만 일치
if id_pw[0] in i[0]:
return 'wrong pw'
# 일치 X
for i in db:
if not id_pw[0] in i[0]:
return 'fail'
for문을 전부 분리해봤지만 결과는 똑같았음
def solution(id_pw, db):
answer = ''
for i in db:
# id만 일치
if id_pw[0] == i[0]:
answer = 'wrong pw'
# 둘다 일치
if id_pw[1] == i[1]:
answer = 'login'
# 일치 X
else:
answer = 'fail'
return answer
참고코드를 보고 for문을 돌렸으니 in이 필요없음을 깨닫고 전부 ==으로 교체
정답률 90%
해결 방법
def solution(id_pw, db):
answer = ''
for i in db:
# id만 일치
if id_pw[0] == i[0]:
answer = 'wrong pw'
# 둘다 일치
if id_pw[1] == i[1]:
answer = 'login'
return answer
# 일치 X
else:
answer = 'fail'
return answer
answer의 값이 아직도 바뀌는 상태로 존재했었다. 그래서 첫번째 if문을 진입했다면 return하도록 만들었다.
이건 조건중에 id의 중복은 없다라는 제한사항 덕분에 가능한 것 같다.
이게 없다면 내가 처음에 작성한 것 처럼 and를 사용하며 if문의 양 자체가 매우 많아질 것 같다.
def solution(id_pw, db):
answer = ''
for i in db:
# 둘다 일치
if id_pw[0] == i[0] and id_pw[1] == i[1]:
return 'login'
# id만 일치
elif id_pw[0] == i[0]:
return 'wrong pw'
# 일치 X
else:
answer = 'fail'
return answer
def solution(id_pw, db):
for i in db:
# 둘다 일치
if id_pw[0] == i[0] and id_pw[1] == i[1]:
return 'login'
for i in db:
# id만 일치
if id_pw[0] == i[0]:
return 'wrong pw'
# 일치 X
for i in db:
if not id_pw[0] == i[0]:
return 'fail'
정답이 한 번 나오니 이전의 코드들도 전부 알맞게 변환 가능했다. return을 바로 주는 방향성은 좋았으나 이전 코드들은 in이 문제였고, in을 지우면서 return도 지워서 시행착오를 더 겪은 것이었다.
알게 된 점
return의 위치에 따라 결과가 천차만별이 되므로 적절하게 탈출해야 원하는 값을 얻을 수 있다.
결과가 생각과 차이난다면 조건문의 조건이 알맞게 설정됐는지도 확인해야 한다.
'개발일지 > TIL' 카테고리의 다른 글
TIL 23-04-09 (0) | 2023.04.09 |
---|---|
TIL 23-04-08 (0) | 2023.04.08 |
TIL 23-04-06 (0) | 2023.04.06 |
TIL 23-04-05 (0) | 2023.04.05 |
TIL 23-04-04 (0) | 2023.04.04 |