알고리즘 문제 풀기 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] | a |
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.참조 링크
- 정규표현식 정리와 예제 : https://codechacha.com/ko/java-regex/
2. Map의 키나 value를 이용하여 정렬하는 방법 : https://ponyozzang.tistory.com/404