
✅ 문제 & 제약조건

✅ 입출력 예

✅ 풀이 과정
일단 두 개의 배열 id_pw, db에 for 문을 돌려서 값을 가져오는 방법을 생각 해 봤다. id_pw는 1차원 배열, db는 2차원 배열이라서 id_pw의 0번 인덱스가 로그인 시도한 사용자의 id값이 되고 1번 인덱스가 패스워드이다. 반면 db는 2차원 배열이기 때문에 [ ] [ ] 형식으로 접근을 해 줘야 한다. [i][0] 이 아이디값이고 [i][1]이 패스워드 값이다.
case 1 : id_pw의 아이디값이 db[i][0]과 같고 id_pw의 패스워드 값이 db[i][1] 이랑 같으면 answer에 "login" 값 넣기
case2 : id_pw의 아이디값이 db[i][0]과 같으나 id_pw의 패스워드 값이 db[i][1] 이랑 같지 않으면 answer에 "wrong pw" 대입
case3 : id_pw의 아이디값이 db[i][0]과 같지 않고 id_pw의 패스워드 값이 db[i][1] 이랑 같지 않으면 "fail"
첫번째로 제출한 코드 (틀린 코드)
import java.util.HashMap;
import java.util.Map;
class Solution {
public String solution(String[] id_pw, String[][] db) {
String answer = "";
for (int i = 0; i < db.length; i++) {
if(id_pw[0].equals(db[i][0]) && id_pw[1].equals(db[i][1])) {
answer = "login";
break;
} else if(id_pw[0].equals(db[i][0]) && id_pw[1] != db[i][1]) {
// 실패한 이유 : 문자열 비교할 때는 != 이나 == 쓰지 않음
answer = "wrong pw";
break;
} else {
answer = "fail"; // answer 변수에 빈 문자열 대신 fail을 넣으면 좋다
}
}
return answer;
}
}
두번째로 제출한 코드 (맞는 코드)
수정내용
- 비밀번호 비교: id_pw[1] != db[i][1]를 !id_pw[1].equals(db[i][1])로 변경
- "fail" 처리: 기본 값을 "fail"로 설정하고, 로그인이나 비밀번호 오류가 없을 경우에만 그 값을 유지하는 것이 간결
비밀번호 비교에서 != 연산자는 문자열 비교에 적합하지 않는다는 건 알았는데 .equals의 부정 표현을 몰랐다. 문자열을 비교할 때는 equals() 메소드를 사용하고 같지 않다는 표현을 할 때는 !비교할값1.equals(비교할값2) 또한, 위에서 String answer 변수 선언시 "fail"을 디폴트로 넣어 놓으면 else구문 수행 안해도 됨.
class Solution {
public String solution(String[] id_pw, String[][] db) {
String answer = "fail"; // 기본 값을 "fail"로 설정
for (int i = 0; i < db.length; i++) {
if (id_pw[0].equals(db[i][0]) && id_pw[1].equals(db[i][1])) {
return "login"; // 로그인 성공
} else if (id_pw[0].equals(db[i][0]) && !id_pw[1].equals(db[i][1])) {
answer = "wrong pw"; // 비밀번호 오류
}
// 사용자 존재하지 않는 경우는 "fail"로 기본 설정이 유지
}
return answer; // 최종 결과 반환
}
}

HashMap 사용한 코드
추가로 다른 분이 작성한건데 잘 쓴 코드 있어서 가져왔다
Hash map의 key, value 값으로 조회하는 코드
import java.util.HashMap; // HashMap 클래스를 사용하기 위해 import
import java.util.Map; // Map 인터페이스를 사용하기 위해 import
class Solution {
public String solution(String[] id_pw, String[][] db) {
// 로그인 시도에 대한 결과를 저장할 변수 초기화
String answer = "";
// 사용자 ID와 비밀번호를 저장할 HashMap 생성
Map<String, String> hashMap = new HashMap<String, String>();
// 데이터베이스(db)의 모든 사용자 정보를 HashMap에 저장
for (String[] strings : db) {
hashMap.put(strings[0], strings[1]); // strings[0]은 ID, strings[1]은 비밀번호
}
// 입력받은 ID가 HashMap에 존재하는지 확인
if (hashMap.containsKey(id_pw[0])) {
// ID가 존재할 경우, 비밀번호를 확인
if (hashMap.get(id_pw[0]).equals(id_pw[1])) {
// 비밀번호가 맞으면 "login" 반환
return "login";
} else {
// 비밀번호가 틀리면 "wrong pw" 반환
return "wrong pw";
}
} else {
// ID가 존재하지 않으면 "fail" 반환
return "fail";
}
}
}
HashMap은 자바에서 제공하는 데이터 구조 중 하나로, 키-값 쌍을 저장하는 해시 테이블 기반의 맵(Map)이다
해시 함수를 사용하여 키를 해시 값으로 변환한 후, 해시 값을 통해서 값을 저장하고 검색하므로 속도가 빠르다
HashMap 관련 메서드
- put(key, value): 지정한 키와 값을 맵에 추가
- get(key): 지정한 키에 해당하는 값을 반환 (키가 존재하지 않으면 null을 반환)
- remove(key): 지정한 키와 그에 해당하는 값을 제거
- containsKey(key): 특정 키가 맵에 존재하는지 확인
- keySet(): 모든 키를 Set으로 반환
'코딩테스트 > JAVA테스트' 카테고리의 다른 글
[프로그래머스] (Java) 대소문자 바꿔서 출력하기, 문자열 돌리기 (4) | 2025.01.13 |
---|---|
[프로그래머스] (Java) 연속된 부분 수열의 합 (투포인터, 슬라이딩 윈도우 알고리즘) (68) | 2024.12.15 |
[프로그래머스] [PCCP 기출문제] 1번 / 동영상 재생기 - Java (113) | 2024.11.24 |
[프로그래머스] (Java) 소수찾기 (완전탐색) (47) | 2024.11.21 |
[프로그래머스] (Java) 소수 만들기 (3) | 2024.10.27 |

✅ 문제 & 제약조건

✅ 입출력 예

✅ 풀이 과정
일단 두 개의 배열 id_pw, db에 for 문을 돌려서 값을 가져오는 방법을 생각 해 봤다. id_pw는 1차원 배열, db는 2차원 배열이라서 id_pw의 0번 인덱스가 로그인 시도한 사용자의 id값이 되고 1번 인덱스가 패스워드이다. 반면 db는 2차원 배열이기 때문에 [ ] [ ] 형식으로 접근을 해 줘야 한다. [i][0] 이 아이디값이고 [i][1]이 패스워드 값이다.
case 1 : id_pw의 아이디값이 db[i][0]과 같고 id_pw의 패스워드 값이 db[i][1] 이랑 같으면 answer에 "login" 값 넣기
case2 : id_pw의 아이디값이 db[i][0]과 같으나 id_pw의 패스워드 값이 db[i][1] 이랑 같지 않으면 answer에 "wrong pw" 대입
case3 : id_pw의 아이디값이 db[i][0]과 같지 않고 id_pw의 패스워드 값이 db[i][1] 이랑 같지 않으면 "fail"
첫번째로 제출한 코드 (틀린 코드)
import java.util.HashMap; import java.util.Map; class Solution { public String solution(String[] id_pw, String[][] db) { String answer = ""; for (int i = 0; i < db.length; i++) { if(id_pw[0].equals(db[i][0]) && id_pw[1].equals(db[i][1])) { answer = "login"; break; } else if(id_pw[0].equals(db[i][0]) && id_pw[1] != db[i][1]) { // 실패한 이유 : 문자열 비교할 때는 != 이나 == 쓰지 않음 answer = "wrong pw"; break; } else { answer = "fail"; // answer 변수에 빈 문자열 대신 fail을 넣으면 좋다 } } return answer; } }
두번째로 제출한 코드 (맞는 코드)
수정내용
- 비밀번호 비교: id_pw[1] != db[i][1]를 !id_pw[1].equals(db[i][1])로 변경
- "fail" 처리: 기본 값을 "fail"로 설정하고, 로그인이나 비밀번호 오류가 없을 경우에만 그 값을 유지하는 것이 간결
비밀번호 비교에서 != 연산자는 문자열 비교에 적합하지 않는다는 건 알았는데 .equals의 부정 표현을 몰랐다. 문자열을 비교할 때는 equals() 메소드를 사용하고 같지 않다는 표현을 할 때는 !비교할값1.equals(비교할값2) 또한, 위에서 String answer 변수 선언시 "fail"을 디폴트로 넣어 놓으면 else구문 수행 안해도 됨.
class Solution { public String solution(String[] id_pw, String[][] db) { String answer = "fail"; // 기본 값을 "fail"로 설정 for (int i = 0; i < db.length; i++) { if (id_pw[0].equals(db[i][0]) && id_pw[1].equals(db[i][1])) { return "login"; // 로그인 성공 } else if (id_pw[0].equals(db[i][0]) && !id_pw[1].equals(db[i][1])) { answer = "wrong pw"; // 비밀번호 오류 } // 사용자 존재하지 않는 경우는 "fail"로 기본 설정이 유지 } return answer; // 최종 결과 반환 } }

HashMap 사용한 코드
추가로 다른 분이 작성한건데 잘 쓴 코드 있어서 가져왔다
Hash map의 key, value 값으로 조회하는 코드
import java.util.HashMap; // HashMap 클래스를 사용하기 위해 import import java.util.Map; // Map 인터페이스를 사용하기 위해 import class Solution { public String solution(String[] id_pw, String[][] db) { // 로그인 시도에 대한 결과를 저장할 변수 초기화 String answer = ""; // 사용자 ID와 비밀번호를 저장할 HashMap 생성 Map<String, String> hashMap = new HashMap<String, String>(); // 데이터베이스(db)의 모든 사용자 정보를 HashMap에 저장 for (String[] strings : db) { hashMap.put(strings[0], strings[1]); // strings[0]은 ID, strings[1]은 비밀번호 } // 입력받은 ID가 HashMap에 존재하는지 확인 if (hashMap.containsKey(id_pw[0])) { // ID가 존재할 경우, 비밀번호를 확인 if (hashMap.get(id_pw[0]).equals(id_pw[1])) { // 비밀번호가 맞으면 "login" 반환 return "login"; } else { // 비밀번호가 틀리면 "wrong pw" 반환 return "wrong pw"; } } else { // ID가 존재하지 않으면 "fail" 반환 return "fail"; } } }
HashMap은 자바에서 제공하는 데이터 구조 중 하나로, 키-값 쌍을 저장하는 해시 테이블 기반의 맵(Map)이다
해시 함수를 사용하여 키를 해시 값으로 변환한 후, 해시 값을 통해서 값을 저장하고 검색하므로 속도가 빠르다
HashMap 관련 메서드
- put(key, value): 지정한 키와 값을 맵에 추가
- get(key): 지정한 키에 해당하는 값을 반환 (키가 존재하지 않으면 null을 반환)
- remove(key): 지정한 키와 그에 해당하는 값을 제거
- containsKey(key): 특정 키가 맵에 존재하는지 확인
- keySet(): 모든 키를 Set으로 반환
'코딩테스트 > JAVA테스트' 카테고리의 다른 글
[프로그래머스] (Java) 대소문자 바꿔서 출력하기, 문자열 돌리기 (4) | 2025.01.13 |
---|---|
[프로그래머스] (Java) 연속된 부분 수열의 합 (투포인터, 슬라이딩 윈도우 알고리즘) (68) | 2024.12.15 |
[프로그래머스] [PCCP 기출문제] 1번 / 동영상 재생기 - Java (113) | 2024.11.24 |
[프로그래머스] (Java) 소수찾기 (완전탐색) (47) | 2024.11.21 |
[프로그래머스] (Java) 소수 만들기 (3) | 2024.10.27 |