코딩항해기
[프로그래머스] 로그인 성공? 문제 (JAVA, Python) 본문
JAVA
package test;
public class Login {
/*머쓱이는 프로그래머스에 로그인하려고 합니다.
머쓱이가 입력한 아이디와 패스워드가 담긴 배열 id_pw와 회원들의 정보가 담긴 2차원 배열 db가 주어질 때,
다음과 같이 로그인 성공, 실패에 따른 메시지를 return하도록 solution 함수를 완성해주세요.*/
public static void main(String[] args) {
//확인용
String[] id = {"test", "123"};
String[] id2 = {"rardss", "123"};
String[] id3 = {"rardss", "1234"};
String[][] db = {{"rardss", "123"}, {"yyoom", "1234"}, {"meosseugi", "1234"}};
System.out.println("fail : "+solution(id, db)); //fail
System.out.println("login : "+solution(id2, db)); //login
System.out.println("wrong pw : "+solution(id3, db)); //wrong pw
}
public static String solution(String[] id_pw, String[][] db) {
//msg
final String ID_FAIL = "fail"; //아이디 불일치
final String PW_FAIL = "wrong pw"; //비밀번호 불일치
final String LOGIN_SUCCESS = "login"; //성공 시
//들어온 배열의 0번(아이디)가 db데이터의 중 0번(아이디)와 일치하는 경우가 있나?
//있다면 해당 데이터의 1번(비밀번호)와 일치하나?
//일치한다면 로그인 성공문구 반환
//일치하지 않는다면 비밀번호 불일치 문구 반환
//db를 다 확인했는데도 없다면 아이디 불일치 문구 반환
for(String[] data : db){ //DB에서
//아이디가 일치하는 경우가 있는지
if(data[0].equals(id_pw[0])){
System.out.println("id check success");
//일치한다면 비밀번호 확인
if(data[1].equals(id_pw[1])){
//비밀번호가 일치한다면
System.out.println("pw check success");
return LOGIN_SUCCESS;
}
//비밀번호가 일치하지 않는다면
System.out.println("pw check fail");
return PW_FAIL;
}
}
//일치하는 경우가 없다면
return ID_FAIL;
}
}
Python
def solution(id_pw, db):
#msg
ID_FAIL = 'fail'
PW_FAIL = 'wrong pw'
LOGIN_SUCCESS = 'login'
#들어온 배열의 아이디와 일치하는 아이디가 있는지 확인
#있다면 비밀번호 일치 확인
#일치하면 로그인
#일치하지 않는다면 비밀번호 불일치
#없다면 아이디 불일치
for data in db:
#아이디가 일치하는지 확인
if data[0] == id_pw[0]:
print('id check success')
#아이디 일치할 경우 pw 일치 확인
if data[1] == id_pw[1]:
#pw일치
print('pw check success')
return LOGIN_SUCCESS
#비밀번호 불일치
print('pw check fail')
return PW_FAIL
#아이디 불일치
return ID_FAIL
db = [["rardss", "123"], ["yyoom", "1234"], ["meosseugi", "1234"]]
id = ["test", "123"]
id2 = ["rardss", "123"]
id3 = ["rardss", "1234"]
print("fail : "+solution(id, db)) #fail
print("login : "+solution(id2, db)) #login
print("wrong pw : "+solution(id3, db)) #wrong pw
풀이를 보니 파이썬 3.8에서 할당과 비교를 같이할 수 있는 기능(:=)이 추가되어 해당 기능을 적용한 코드를 보게 되었다.
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"
확실히 파이썬은 for문을 사용하지 않고 구현할 수 있는 방법이 많은 것 같다. 딕셔너리, 자바에서는 Map을 활용하면 좋을 것 같다는 생각을 풀면서 하긴 했는데 이렇게까지 효과적일줄은 몰랐다.
해당 코드는 db리스트를 딕셔너리로 변환해 일치하는 데이터를 쉽게 찾아와 db_pw에 비밀번호를 할당하면서 조건문에서 사용한다. 이후 비밀번호를 비교해 알맞은 문구를 출력한다.
(아이디가 있으면 pw를 반환하기 때문에 True, 아니라면 None을 반환해 False가 되는 구조)
'problem solving > 코딩 테스트' 카테고리의 다른 글
[프로그래머스] 코드연결하기 (JAVA, Python) (0) | 2024.11.26 |
---|---|
[프로그래머스] 연속된 수의 합 (JAVA, Python) (0) | 2024.11.24 |
[프로그래머스] JAVA, Python으로 문제풀이 (0) | 2024.11.22 |
[코드업] 4833 : 쇠 막대기 (JAVA) (0) | 2024.11.19 |
[프로그래머스] PCCE 기출문제 1~9번 (0) | 2024.10.05 |