개발일기

#9 프로그래머스 로그인성공/최댓값만들기2/인덱스바꾸기/배열회전/외계행성나이 본문

오류 및 알고리즘정리본

#9 프로그래머스 로그인성공/최댓값만들기2/인덱스바꾸기/배열회전/외계행성나이

츄98 2023. 4. 25. 23:41

1. 로그인 성공!

머쓱이가 입력한 아이디와 패스워드가 담긴 배열 id_pw와 회원들의 정보가 담긴 2차원 배열 db가 주어질 때, 다음과 같이 로그인 성공, 실패에 따른 메시지를 return하도록 solution 함수를 완성해주세요.

id_pw: ["meosseugi", "1234"]
db: [["rardss", "123"], ["yyoom", "1234"], ["meosseugi", "1234"]]
result : login
이유: 아이디와 비밀번호가 모두 일치하는 회원정보가 있으면 "login"을 return합니다.

 

def solution(id_pw, db):
    for i in db:
        if id_pw[0] in i: 
            if id_pw[1] == i[1]:
                return "login"
            else:
                return "wrong pw"
    return "fail"

# 다른 풀이
def solution(id_pw, db):
    if db_pw := dict(db).get(id_pw[0]):
        return "login" if db_pw == id_pw[1] else "wrong pw"
    return "fail"
    
   
# :=는 Python 3.8에서 새로 나온 기능
# := 바다코끼리 연산자
# dict(db): 리스트의 값들이 key/value 쌍을 맞출 수 있는 2개로 구성되어 있으면, dictionary 형태로 변경이 가능하다

 

 

2. 최댓값 만들기2

정수 배열 numbers가 매개변수로 주어집니다. 
numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.

 

# 최댓값만들기2
def solution(numbers):
    numbers.sort()
    rightnumber = numbers[-1]*numbers[-2]
    leftnumber = numbers[0]*numbers[1]
    if rightnumber > leftnumber:
        return rightnumber
    else:
        return leftnumber
    # if-else문을, return max(rightnumber,leftnumber)로 한줄로 해결할 수도 있다!

# 다른 풀이
def solution(numbers):
    numbers = sorted(numbers)
    return max(numbers[0] * numbers[1], numbers[-1]*numbers[-2])

 

 

3. 인덱스 바꾸기

문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때, 
my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하도록
solution 함수를 완성해보세요.

 

# 인덱스 바꾸기
def solution(my_string, num1, num2):
    my_list = list(my_string)
    my_list[num1], my_list[num2] = my_list[num1], my_list[num1]
    return ''.join(my_list)

 

4. 배열 회전시키기

정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다.
배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.

 

# 배열 회전시키기
def solution(numbers, direction):
    if direction == "right":
        numbers.insert(0,numbers[-1])
        # insert: def insert(self,
        #            __index: SupportsIndex,
        #            __object: _T) -> None
        del numbers[-1]
    else:
        numbers.append(numbers[0])
        del numbers[0]
    return numbers

# 다른 사람 풀이1
def solution(numbers, direction):
    return [numbers[-1]] + numbers[:-1] if direction == 'right' else numbers[1:] + [numbers[0]]

# 풀이2
from collections import deque
def solution(numbers, direction):
    numbers = deque(numbers)
    if direction == 'right':
        numbers.rotate(1)
    else:
        numbers.rotate(-1)
    return list(numbers)

 

 

5. 외계행성의 나이

우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다.
입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다.
a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다.
나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.

 

# 외계행성의 나이
def solution(age):
    dic = {0:"a", 1:"b", 2: "c", 3: "d", 4: "e", 5: "f", 6: "g", 7: "h", 8: "i", 9: "j"}
    if len(str(age)) == 4:
        return "baaa"
    elif len(str(age)) == 3:
        return dic[age//100] + dic[(age%100)//10] + dic[age%10]
    elif len(str(age)) == 2:
        return dic[age//10] + dic[age%10]
    else:
        return dic[age]

# 다른 풀이
def solution(age):
    return ''.join([chr(int(i)+97) for i in str(age)])
# 문자열age 에서 i를 정수로 변환 한 후에 97을 더한 유니코드를 반환

def solution(age):
    age = str(age)
    age = age.replace("0", "a")
    age = age.replace("1", "b")
    age = age.replace("2", "c")
    age = age.replace("3", "d")
    age = age.replace("4", "e")
    age = age.replace("5", "f")
    age = age.replace("6", "g")
    age = age.replace("7", "h")
    age = age.replace("8", "i")
    age = age.replace("9", "j")
    return age

def solution(age):
    age = str(age)
    answer = ''
    match = {"0":"a", "1":"b", "2":"c", "3":"d", "4":"e", "5":"f", "6":"g", "7":"h", "8":"i", "9":"j"}
    for i in age:
        answer += match[i]
    return answer