본문 바로가기
카테고리 없음

TIL230130

by hbIncoding 2023. 1. 30.

알고리즘 문제 풀기 3일차

 

0. 오늘 푼 문제 정리

번호 문제명 프로그래머스난이도
1 예산 1
2 최대공약수와 최소 공배수 1
3 K번째 수 1
4 나머지가 1이 되는 수 1
5 소수 찾기 1
6 실패율 1
7 체육복 1
8 폰켓몬 1
9 [1차] 비밀지도 1
10 키패드 누르기 1
11 [1차] 다트 게임 1
12 최댓값과 최솟값 1
13 숫자의 표현 1
14 크레인 인형뽑기 게임 1

 

 

 

1. 오늘 찾아보고 사용한 기능

1) 재귀 함수를 이요한 최대공약수 구하는 방법

public static int gcd(int p, int q)
    {
    if (q == 0) return p;
    return gcd(q, p%q);
    }

2) 배열에 해당 값이 몇개인지 파악하는 방법

int cnt = Collections.frequency(Arrays.asList(arr, n);

3)배열의 원소값들을 정렬하고 바뀐 인덱스 값으로 리턴하는 메서드

 ex) {3,4,1,2} > {2,3,0,1}

public int[] sortbyvalue_returnindex(double[] d){
    int temp_index = -1;
    int[] res = new int[d.length];
    for (int i = 0; i < d.length; i++) {
        res[i] = i+1;
    }
    double temp;
    for (int i = 0; i < d.length; i++) {
        for (int j = i; j < d.length; j++) {
            if(d[i]<d[j]){
                temp_index = res[i];
                temp = d[i];
                res[i] = res[j];
                res[j] = temp_index;
                d[i] = d[j];
                d[j] = temp;
            } else if (d[i]==d[j] && res[i]>res[j]) {
                temp_index = res[i];
                res[i] = res[j];
                res[j] = temp_index;
            }
        }
    }
    return res;
}

4) Switch 문에 case를 연달아 사용 가능하다.

switch(numbers[i]) {
    case 1: case 4: case 7:
        answer += "L";
        tempL = numbers[i];
        break;
    case 3: case 6: case 9:
        answer += "R";
        tempR = numbers[i];
        break;
    default:
        String tempHand = checkHand(numbers[i]);
        if(tempHand.equals("R"))
            tempR = numbers[i] + ((numbers[i] == 0)? 11:0);
        else tempL = numbers[i] + ((numbers[i] == 0)? 11:0);
        answer += tempHand;
        break;
}

 

 

 

2) to.CharArray()를 쓰면 문자열 전체를 char 로 관리가능

import java.util.Arrays;
public class ReverseStr {
    public String reverseStr(String str){
            char[] ch = str.toCharArray();
        Arrays.sort(ch);
        StringBuffer st = new StringBuffer(String.valueOf(ch));
        st.reverse();
        return  st.toString();
}
}

3) 배열에서 원하는 값에 대한 익덱스 값 찾기, 2가지 방법

import java.util.Arrays;
public class main {
	public static void main(String[] args) {
		String [] arr = {"a", "b", "c", "d","f"};
		
		int index = Arrays.binarySearch(arr, "d");
		
		System.out.println(index + " 에 해당하는 값 -> " + arr[index]);
	}

}
import java.util.Arrays;

public class IndexOfTest {
    public static void main(String[] args) {
		String[] arr = {"a","b","c"};
		System.out.println(Arrays.asList(arr).indexOf("b")); //1이 출력된다.
}

4) 배열 리스트로 변환 후 원하는 값 있는지 true/false로 리턴하기

public static void main(String args[]) {
  String[] strArray = {"AB", "BC", "BCD", "CD", "CDEF"};

  List<String> strList = new ArrayList<>(Arrays.asList(strArray));

  if(strList.contains("BCD")) {
    System.out.println("BCD는 strArray에 존재합니다.");
  }
}

5) StringBuilder를 이용한 전체 바꾸기

import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = 0;
        StringBuilder sb = new StringBuilder("");
        int len = s.length();
        String[] digits = {"0","1","2","3","4","5","6","7","8","9"};
        String[] alphabets = {"zero","one","two","three","four","five","six","seven","eight","nine"};

        for(int i=0; i<10; i++){
            s = s.replaceAll(alphabets[i],digits[i]);
        }

        return Integer.parseInt(s);
    }
}

6) 정규 표현식을 통해 replaceall 함수를 보다 깔끔하고 빠르게 적용시킬 수 있다.

temp = temp.replaceAll("[^-_.a-z0-9]",""); // ^를 []안에 사용하여 예외를 넣고, -를 사용해 구간을 정해준다.
temp = temp.replaceAll("[.]{2,}","."); // { } 를 이용해 연속된 경우를 정해준다.
temp = temp.replaceAll("^[.]|[.]$","");   ^ 와 &을 이용해 구간시작과 끝에 대해 지정해준다

7) Math 를 이용해 최대 값 최소값을 비교할 수 있다.

int iMax    = 0;
int iMin    = 9999999;
int[] asScores= { 50, 55, 34, 65, 78, 93, 23};
 
//최대값 구하기
for(int i : asScores )  iMax = Math.max( i, iMax );
 
//최소값 구하기
for(int i : asScores )  iMin = Math.min( i, iMin );

8)startsWith, endsWith 

String example = "Java programmers";

System.out.println(example.startsWith("J"));
System.out.println(example.startsWith("Jav"));
System.out.println(example.startsWith("Java p"));
System.out.println(example.startsWith("ava")) //false

System.out.println(example.endsWith("s"));
System.out.println(example.endsWith("rs"));
System.out.println(example.endsWith("programmers"));
System.out.println(example.endsWith("Java")); //false