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

TIL 230128

by hbIncoding 2023. 1. 28.

알고리즘 문제 풀기 1일차

 

0. 오늘 푼 문제 정리

번호 문제명 프로그래머스
난이도
1 모의고사 1
2 문자열 내 마음대로 정하기 1
3 소수 만들기 1
4 숫자 문자열과 영단어 1
5 시저 암호 1
6 신규 아이디 추천 1
7 약수의 개수와 덧셈 1
8 약수의 합 1

 

1. 오늘 알게된 사실

  • 정규표현식(regex)에는 다양한 사용 방법이 있다. (아래 표와 페이지 하단 링크를 참조하자) 
. 어떤 문자 1개를 의미
^regex ^ 다음 regex로 line을 시작하는지
regex$ $ 앞의 regex가 line의 마지막으로 끝나는지
[abc] a, b, c 중의 문자 1개
[abc][vz] a, b, c 중에 문자 1개와 v, z 중에 문자 1개의 조합
[^abc] a, b, c를 제외한 문자 1개
[a-d1-7] ad, 17 사이의 문자 1개
X|Z X 또는 Z
\d 0~9 사이의 숫자, [0-9]와 동일
\D 숫자가 아닌 어떤 문자, [^0-9]와 동일
\s whitespace 1개, [\t\n\x0b\r\f]와 동일
\S whitespace를 제외한 문자
\w Alphanumeric(alphabet, 숫자) 문자, [a-zA-Z_0-9]와 동일
\W Alphanumeric을 제외한 문자(whitespace 등)
\S+ whitespace를 제외한 여러 문자
\b 단어의 경계(공백)를 찾습니다
  • intelliJ에서 ClasscastExeption 에러가 나면 build> Rebuild Project 하면 해결된다.
  • java에 ** 을 이용한 제곱은 없다. Math.pow를 쓰자

 

 

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

1) StringBuilder를 이용하면 역정렬이 가능함

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("^[.]|[.]$","");   ^ 와 &을 이용해 구간시작과 끝에 대해 지정해준다

 

 

 

 

 

 

 

 

 

 

 

 

3.참조 링크

  1. 정규표현식 정리와 예제 : https://codechacha.com/ko/java-regex/
 

Java - 정규표현식(regex), 다양한 예제로 쉽게 이해하기

정규표현식(Regular expressions), Regex는 문자열에서 어떤 패턴을 찾는데 도움을 줍니다. Regex의 Metacharacters, Quantifiers, Grouping에 대해서 정리하였고 다양한 예제로 설명합니다. Regex는 대부분 알고 있지

codechacha.com

2. Map의 키나 value를 이용하여 정렬하는 방법 : https://ponyozzang.tistory.com/404