코딩,해볼까

07.25. 프로그래머스 : 로그인 성공?, n의 배수 고르기, 2차원으로 만들기 본문

Back/TIL

07.25. 프로그래머스 : 로그인 성공?, n의 배수 고르기, 2차원으로 만들기

떠굥 2023. 7. 26. 00:52

< 로그인 성공? >

1. 나의 풀이

id_pw가 있을 때는 login이고, 없을 때는 fail 이라는 if문을 만들어서 그 안에서 wrong pw를 골라내도록 식을 구성하였다.

def solution(id_pw, db):
    answer = ''
    if id_pw in db:
         answer += 'login'

    else:
        for i in db:
            if id_pw[0] == i[0]:
                answer += 'wrong pw'
        if answer == '':
            answer += 'fail'

    return answer

 

2. 풀이과정

db = [ [ ] ] 의 원소 [ ] 를 꺼내어 id_pw와 하나하나 비교할 때, answer = "failfailfailwrong pw" 과 같은 answer를 도출하였다. 이는 for문의 특성상 db 안의 모든 요소 비교 결과값이 출력되었으며, 이 값들은 모두 문제에서 제시하는 result 중 하나의 값을 무조건 가질 수 밖에 없는 요소들이기 때문이다.

# 입출력 예
id_pw = ["meosseugi", "1234"]
db = [["rardss", "123"], ["yyoom", "1234"], ["meosseugi", "1234"]]

# 나의 첫 풀이 과정 일부
for i in db:
    if i[0] == id_pw[0] and i[1] != id_pw[1]:
        answer += 'wrong pw'
        break
    elif i[0] != id_pw[0] and i[1] == id_pw[1]:
        answer += 'fail'
        break

또한, 로그인 실패 시 아이디가 일치하는 회원이 없다면 = fail

그러므로 아이디와 비밀번호까지도 일치하는 회원이 없다면 이는 fail로 처리해주어야 한다.

 

< n의 배수 고르기 >

1. 나의 풀이

def solution(n, numlist):
    answer = []
    for i in numlist:
        if i % n == 0:
            answer.append(i)
            
    return answer

numlist의 원소들 중 n의 배수를 고르기 위해 n으로 나눠지는 숫자를 새 배열에 추가하여 그 배열을 return 했다. 이 풀이는 한 줄 써보기, 람다식 사용 등이 가능할 것 같다.

 

< 2차원으로 만들기 >

1. 나의 풀이

배열을 2차원배열화 하는 문제이다.

def solution(num_list, n):
    answer = []
    for i in range(0, len(num_list)-1, n):
        answer.append(num_list[i:i+n])
    return answer

 

 

2. 풀이과정

range(시작:끝:간격) 사용법에 맞춰 0부터 리스트 길이 -1(index 번호와 length 번호는 1의 차이가 있다.) 까지 n만큼 증가하는 수들만 뽑아냈다.

for i in range(0, len(num_list)-1, n)
print(i) # ex) 2 4 6 8

for문 내부에는 i 값에 따라서 리스트를 잘라 새로운 리스트에 넣어주는 함수가 있다.

i번째 ~ i+n번째 수 까지 잘라야만 원하는 숫자만큼 쪼개어 결과값을 만들어 줄 수 있다.

이 부분 또한 리스트 슬라이싱 방법을 활용하였다. range와 list 슬라이싱은 매우 흡사하다.

answer.append(num_list[i:i+n])
Comments