본문 바로가기

개발일지/TIL

TIL 23-04-07

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

    # 2중 for문으로 num_list와 n을 실행?
    # while문으로 num_list만큼 돌리고
    # reverse() 쓰고
    # for문으로 n만큼 pop()
    # num_list는 반복문사용하고
    # 중간에 n만큼 진행되면 answer에 넣어야 하는데

 시도해 본 것들

 

 해결 방법

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 함수를 완성해주세요.
# 조건문으로 in db 일치 login,
    # 아이디 일치 x fail, 아이디만 일치  wrongpw
    # id가 일치하는지 먼저 체크

 시도해 본 것들

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