문제
https://school.programmers.co.kr/learn/courses/30/lessons/42577
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
설명

입출력

나의 풀이
풀이 과정
첫 번째 입출력 예제인 phone_book = ["119", "97674223", "1195524421"]를 예로 들어서
처음에는 "119"가 어떤 번호의 접두어인지에 집중해서 풀이를 생각했다.
모든 배열을 돌면서 각 번호가 다른 번호의 접두어인지 모든 번호를 잘라서 확인하는 코드를 작성했다.
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
int l = 0;
for(String phone : phone_book) {
l = phone.length();
for(String other : phone_book) {
try {
if(other.length() == l) {
continue;
} else {
if(phone.equals(other.substring(0,l))) {
answer = false;
} else {
}
}
} catch (StringIndexOutOfBoundsException e) {
}
}
}
return answer;
}
}
for each 문을 사용해서 phone에 기준 번호를 담고 phone의 길이만큼 나머지 번호들의 접두어를 substring으로 추출했다.
이때 phone의 길이보다 짧은 번호에 substring을 하면 StringIndexOutOfBoundsException가 발생하기 때문에
try, catch로 예외 처리를 해주었다.


정확성 테스트는 통과했는데 효율성 테스트는 전부 실패였다.
정확성 테스트에서의 시간을 보니 2중 for문 안에 조건문, equals, substring 등 이 겹쳐져서 시간이 오래 걸리는 것 같다.
다른 코드들을 참고한 결과
처음에 생각한 "119"가 어떤 번호의 접두어인지가 아닌 "119"의 접두어가 존재할까?에 초점을 맞춰서 생각해야 했다.
import java.util.*;
class success {
public static boolean solution(String[] phone_book) {
boolean answer = true;
Set<String> hs = new HashSet<String>();
for(String num : phone_book) {
hs.add(num);
}
for(String phone : phone_book) {
for(int i=1; i < phone.length(); i++) {
if (hs.contains(phone.substring(0,i))){
answer = false;
}
}
}
return answer;
}
}
첫 for문에 "119"가 들어왔을 때 두 번째 for문 안에서 substring으로 "1" ,"11", "119" 가 hashset안에 있는지 확인하며
접두어가 존재하는지 확인하는 것이다.

효율성 테스트까지 잘 통과 되었다.
문법 정리
- 문자열 비교 ==와 equals()의 차이
- int나 boolean 같은 데이터는 ==로 비교
- String 타입에서 ==는 주소값을 비교하는 것이다. (값이 같아도 주소가 다르면 false)
- equals()는 문자열의 값 자체를 비교한다. st.equals("ab") 이런식으로 사용
참고 블로그 + 나중에 다시 읽어보기!
==와 equals의 차이 : https://sudo-minz.tistory.com/93
String에 대하여 : https://aljjabaegi.tistory.com/465
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] (JAVA) Lv2 카펫 (0) | 2023.07.02 |
---|---|
[프로그래머스] (JAVA) Lv1 최소직사각형 (0) | 2023.07.01 |
[프로그래머스] (JAVA) Lv0 배열 조각하기 (0) | 2023.06.01 |
[프로그래머스] (JAVA) Lv0 더 크게 합치기 (0) | 2023.06.01 |
[프로그래머스] (JAVA) Lv0 문자열 겹쳐쓰기 (0) | 2023.05.31 |
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42577
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
설명

입출력

나의 풀이
풀이 과정
첫 번째 입출력 예제인 phone_book = ["119", "97674223", "1195524421"]를 예로 들어서
처음에는 "119"가 어떤 번호의 접두어인지에 집중해서 풀이를 생각했다.
모든 배열을 돌면서 각 번호가 다른 번호의 접두어인지 모든 번호를 잘라서 확인하는 코드를 작성했다.
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
int l = 0;
for(String phone : phone_book) {
l = phone.length();
for(String other : phone_book) {
try {
if(other.length() == l) {
continue;
} else {
if(phone.equals(other.substring(0,l))) {
answer = false;
} else {
}
}
} catch (StringIndexOutOfBoundsException e) {
}
}
}
return answer;
}
}
for each 문을 사용해서 phone에 기준 번호를 담고 phone의 길이만큼 나머지 번호들의 접두어를 substring으로 추출했다.
이때 phone의 길이보다 짧은 번호에 substring을 하면 StringIndexOutOfBoundsException가 발생하기 때문에
try, catch로 예외 처리를 해주었다.


정확성 테스트는 통과했는데 효율성 테스트는 전부 실패였다.
정확성 테스트에서의 시간을 보니 2중 for문 안에 조건문, equals, substring 등 이 겹쳐져서 시간이 오래 걸리는 것 같다.
다른 코드들을 참고한 결과
처음에 생각한 "119"가 어떤 번호의 접두어인지가 아닌 "119"의 접두어가 존재할까?에 초점을 맞춰서 생각해야 했다.
import java.util.*;
class success {
public static boolean solution(String[] phone_book) {
boolean answer = true;
Set<String> hs = new HashSet<String>();
for(String num : phone_book) {
hs.add(num);
}
for(String phone : phone_book) {
for(int i=1; i < phone.length(); i++) {
if (hs.contains(phone.substring(0,i))){
answer = false;
}
}
}
return answer;
}
}
첫 for문에 "119"가 들어왔을 때 두 번째 for문 안에서 substring으로 "1" ,"11", "119" 가 hashset안에 있는지 확인하며
접두어가 존재하는지 확인하는 것이다.

효율성 테스트까지 잘 통과 되었다.
문법 정리
- 문자열 비교 ==와 equals()의 차이
- int나 boolean 같은 데이터는 ==로 비교
- String 타입에서 ==는 주소값을 비교하는 것이다. (값이 같아도 주소가 다르면 false)
- equals()는 문자열의 값 자체를 비교한다. st.equals("ab") 이런식으로 사용
참고 블로그 + 나중에 다시 읽어보기!
==와 equals의 차이 : https://sudo-minz.tistory.com/93
String에 대하여 : https://aljjabaegi.tistory.com/465
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] (JAVA) Lv2 카펫 (0) | 2023.07.02 |
---|---|
[프로그래머스] (JAVA) Lv1 최소직사각형 (0) | 2023.07.01 |
[프로그래머스] (JAVA) Lv0 배열 조각하기 (0) | 2023.06.01 |
[프로그래머스] (JAVA) Lv0 더 크게 합치기 (0) | 2023.06.01 |
[프로그래머스] (JAVA) Lv0 문자열 겹쳐쓰기 (0) | 2023.05.31 |