[알고리즘] Java 유용한 것들

Simple·2022년 10월 2일
0

알고리즘

목록 보기
2/2

💡 새로 알게되었거나, 유용한 것들

  • replaceAll(”[^A-Z]”, “”) 대문자알파벳을 제외한(^는 부정기호) 모든 것을 대체

  • 변수 최대 최소 초기화 해줄 때 Integer.MIN_VALUE, MAX_VALUE 활용하면 편하다.

  • int[] arr = new int[s.length()] 이런식으로 길이에 맞게 초기화 가능

  • HashMap 끼리 비교할 때는 equals

  • String to int, Int to String

    • String to int → Integer.parseInt
    • int to String → Integer.toString
  • Character to int, int to Character

    • Character to int → ‘3’-’0’ or Character.forDigit(3) or Character.getNumericValue(3)
    • int to Character → 3+’0’ or Integer.toString(3).charAt(0)
  • Lambda를 이용해서 compare 확장 구현

    • Arrays.sort(arr,(e1,e2) -> {
          if(e1[0]==e2[0]){
              return e1[1]-e2[1];
          } else{
              return e1[0]-e2[0];
          }
      
      });
    • Comparator.comparing() 사용

      • Arrays.sort(arr, Comparator.comparingInt(o -> o[0]));
  • Array에서 max 값 찾기

    • Arrays.stream(arr).max().getAsint();
  • Array값의 합

    • Arrays.stream(arr).sum() → 데이터 타입에 맞춰서 반환해줌
  • .stream

    • .map(x → x.getName()) 임의 변수들에 적용시킨다.
    • .filter(x → x>5) 조건을 걸어준다.
    • collect(Collections.toList()) 리스트로 반환
  • nextInt → 입력받을 때 엔터(\n)를 제외하고 숫자만 가져옴

    • 다음에 nextLine을 입력받을경우 공백문자만 받게된다
  • next → 개행문자를 무시하고 입력을 받는다

  • nextLine → 개행문자를 포함해서 한줄 단위로 입력 (nextInt 다음에 올 시 주의)

  • Integer.valuOf(char값) → ‘1’ 일 경우 1이 나오는 것이 아니라, 아스키 코드 값인 49가 나온다.

  • 람다 이용해서 compareTo 간편적용

map.entrySet()
        .stream()
        .max((entry1,entry2) -> entry1.getValue() > entry2.getValue() ? 1 : -1)
        .get()
        .getKey());
  • 주의: Integer를 ==비교로 확인하지마라 → Integer caching에 의해서 -128~127의 범위는 같다고 나올지언정 이 범위를 넘어서면 false로 나옴, 그러므로 equals()로 비교
  • BufferedWriter를 이용해 출력할려면 String으로 출력해야한다.
    • 출력값 안나올시 BufferedWriter close해줘야 한다.
  • 백준 11718번을 통한 무분별한 nextLine()출력막자
    • Scanner의 nextLine()메소드를 이용하여 줄단위 입력을 받았을 때, \n(다음줄)이 buffer에 남아있게 된다.

      따라서 더이상 입력받을 줄이 없을 때 NoSuchElementException에러가 나기 때문에 hasNextLine()을 이용하여 입력 완료 여부를 검사해야 한다.-> 이 말인 즉슨,

      nextLine()으로 입력을 받으면 다음줄에서 깜빡깜빡 하고있는데 사실 입력된건 없음 -->NoSuchElementException 발생,

      hasNextLine()은 문자열로 구성된 한 줄이 있는지를 검사해주기 때문에 (\n만 남아있으면 false 리턴) 다음줄을 입력받았는지 아닌지를 알 수 있는 것이다.

  • //순서 x, 중복 x 일 때는 HashSet으로 구현하자(속도 더 빠름)

  • 백준 제출은 통과인데 IntelliJ는 무한 루프인 경우가 있다

    • 그대로 출력하기, 4375번 등
    • 위의 코드를 백준 온라인 저지에 제출을 하면 문제없이 맞았습니다! 를 얻게 된다.하지만 보통의 사람들은 테스트코드를 자신의 IDE에서 작성해 본 다음 제출을 하는게 대부분이다. 내가 사용하는 Intellij에서 확인하기 위해선 StringBuilder나 ArrayList 등 한 곳에 입력값들을 저장하고 한 번에 출력해야지만 출력이 된다. 그러지 않으면 엔터값을 계속해서 읽어들이기 때문에 테스트가 되질 않는다
  • 조합구하기방식(nCm), 조합의 수 방식은 외우는게 좋다.

    //조합 구하기
    public void DFS(int L, int s){
            if(L==m){
                for(int x: combi) System.out.print(x+" ");
                System.out.println();
            }
            else{
                for(int i=s; i<=n; i++){
                    combi[L]=i;
                    DFS(L+1, i+1);
                }
            }
    }
    
    //조합의 수
    public int DFS(int n, int r){
            if(dy[n][r]>0)  return dy[n][r];
            if(n==r || r==0)    return 1;
            else return dy[n][r]=DFS(n-1,r-1)+DFS(n-1,r);
    }
  • Disjoint 외우는게 좋다.

static intFind(intv){
	if(v==unf[v])returnv;
	else returnunf[v]=Find(unf[v]);
}
profile
몰입하는 개발자

0개의 댓글

Powered by GraphCDN, the GraphQL CDN