알고리즘 연습(두 개 뽑아서 더하기, 가운데 글자 가져오기, 전화번호 목록)
2021. 5. 4. 20:56ㆍJAVA
# NOTE
indexOf() 는 특정 문자나 문자열이 앞에서부터 처음 발견되는 인덱스를 반환하며
만약 찾지 못했을 경우 "-1"을 반환
.indexOf( "찾을 특정 문자" , "시작할 위치" ) 이런식으로 사용해 주면된다.
"시작할 위치" 같은경우는 생략이 가능하며 생략할 경우 0번째 즉, 처음부터 찾기 시작한다.
https://mine-it-record.tistory.com/124
substring
//사용법
String.substring(start)
//문자열 start위치부터 끝까지 문자열 자르기
String.substring(start,end)
//문자열 start위치 부터 end전까지 문자열 자르기
int 배열을 Integer배열로 변환하는 방법
Integer[] nums = Arrays.stream(대상배열).boxed().toArray(Integer[]::new);
배열을 오름차순으로 정렬하는 방법
Arrays.sort(대상배열);
배열을 내림차순으로 정렬하는 방법
Arrays.sort(대상배열, Collections.reverseOrder());
정렬을 시작하는 위치와, 끝 위치를 지정하고 싶을 때
Arrays.sort(대상배열, 1, 3);
Arrays.sort(대상배열, 1, 3, Collections.reverseOrder());
# 두 개 뽑아서 더하기
class Solution {
public int[] solution(int[] numbers) {
int[] answer = {};
List<Integer> rss = new ArrayList<>();
//1. 각 인덱스에서 뽑아 더하기
for(int i = 0; i < numbers.length; i++){
//동일한 배열을 재료로 이중반복을 돌리는 것이므로
//두번째 반복문의 시작점은 첫번째 반복문의 시작점보다 1이 커야 함
for(int k = i+1; k < numbers.length; k++){
int x = numbers[i]+numbers[k];
//2. 더한값 중 같은 값은 거르기
// indexOf() 는 특정 문자나 문자열이 앞에서부터 처음 발견되는 인덱스를 반환
// 만약 일치값을 찾지 못했을 경우 "-1"을 반환
// 따라서 rss에 기존 일치값이 없는 경우 새로 추가하는 방식
if(rss.indexOf(x) < 0){
rss.add(x);
}
}
}
//3. 모든 값을 배열에 담기(오름차순)
answer = new int[rss.size()];
for(int l = 0; l < answer.length; l++){
answer[l] = rss.get(l);
}
Arrays.sort(answer);
return answer;
}
}
# 가운데 글자 가져오기
// 내가 푼 정답
class Solution1 {
public String solution(String s) {
String answer = "";
//String 길이가 짝수인 경우
if(s.length()%2 == 0) {
answer = s.substring(s.length()/2-1, s.length()/2+1);
}
//String 길이가 홀수인 경우
if(s.length()%2 != 0) {
int index = (int) Math.floor(s.length()/2);
answer = s.substring(index,index+1);
}
return answer;
}
}
// 더 간결한 정답
class Solution2 {
public String solution(String s) {
String answer = "";
//나는 소수점 걱정을 했는데 substring()함수에 들어가는 index는
//기본적으로 정수로 치환이 되는건가??
answer = s.substring((s.length()-1)/2, (s.length()/2)+1);
return answer;
}
}
# 전화번호 목록
// 내가 푼 방식(정확성 X/효율성 X) - 일부 케이스는 통과
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
String baseStr = "";
String otherStr = "";
//1. 기준 문자열 자르기
for(int i = 0; i < phone_book.length; i++){
baseStr = phone_book[i].substring(0);
//2. 기준 문자열 길이만큼 다른 문자열 자르기
for(int k = i+1; k < phone_book.length; k++){
otherStr = phone_book[k].substring(0, baseStr.length());
//3. 포함했는지 여부 확인
for(int l = i+1; l < phone_book.length; l++){
if(otherStr.equals(baseStr)){
return false;
}
}
}
}
return answer;
}
}
// 다른 사람 푼 방식(정확성 O/효율성 X)
class Solution2 {
public boolean solution(String[] phoneBook) {
for(int i=0; i<phoneBook.length; i++) {
for(int j=i+1; j<phoneBook.length; j++) {
if(phoneBook[i].startsWith(phoneBook[j])) {return false;}
if(phoneBook[j].startsWith(phoneBook[i])) {return false;}
}
}
return true;
}
}
'JAVA' 카테고리의 다른 글
[JAVA] indexOf() (0) | 2021.05.04 |
---|---|
[JAVA] copyOfRange() (0) | 2021.05.04 |
알고리즘 연습(완주못한선수, 모의고사, K번째수, 내적) (0) | 2021.05.03 |
[JAVA] .txt파일에서 문자 값 받아오기 (0) | 2021.03.14 |
21.03.08 기술연구(카카오 로그인 API 연동) (0) | 2021.03.08 |