guswns1659 / Java-Algorithm

자료구조, 알고리즘 공부 및 문제풀이 저장소

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Java-Algorithm

자료구조 및 알고리즘 공부 및 문제풀이 저장소

생성 이유

Do it 자료구조와 함께 배우는 알고리즘 자바편을 읽으며 자료구조의 개념을 세웠다. 이젠 문제 풀이 시작!!

커밋 컨벤션

  • [Docs] : README 문서에 풀이 정리
  • [Algorithm] : 문제 풀이한 코드 커밋
구현
  1. Roman to Integer
    • 풀이
    • HashMap, stack 이용해 문제 풀이
    • 테스트 시작 전 스택을 비워야함!
  2. Valid Parentheses
    • 풀이
    • 브라켓의 유효성 확인하는 문제.
    • HashMap, stack 이용해 문제 풀이
    • 테스 시작 전 스택 비우기!!
  3. Min Stack
    • 풀이
    • 최솟값을 구하는 stack 자료구조 구현 문제.
    • 최솟값을 모아놓는 스택을 하나 더 구현해야 했는데, 나는 stream을 이용...
  4. Majority Element
    • 풀이
    • 배열 크기의 절반보다 빈도수가 많은 원소 구하기
    • HashMap의 원소 값 추가하며 구현 : hashMap.merge(key, 1, Integer::sum);
    • more than의 의미는 초과!
  5. Count Primes
    • 풀이
    • 양의 정수 n이하 소수의 개수를 구하기
    • Arrays.asList()로 초기화하면 add, remove() 연산 시 unSupportedOperation 예외 발생
    • Prime인지 계산할 때 <= 주의!! (어딘지 알지?)
  6. Vaild Anagram
    • 풀이
    • 두 개의 문자열이 anagram인지 판별하는 문제
    • char[]는 stream으로 사용하려면 복잡하다. 그냥 for문 쓰기.
    • replaceFirst()와 replace의 차이는 여러개를 바꾸냐 마느냐의 차이다.
    • 반복문으로 해결되는 데 굳이 스택을 사용..
  7. 나머지 한 점
    • 풀이
    • 직사각형의 나머지 한점을 구하는 문제.
    • 해시를 사용했지만 XOR를 이용하면 A, B, B 있을 때 A를 구하기가 쉽다.
  8. 방 번호
  9. 프린터 큐
  10. 에라토스테네스의 체
정렬
  1. ATM
    • 풀이
    • 동빈나의 알고리즘 풀이전략 영상 본 뒤 그리디 알고리즘 문제 풀이 시작
    • 일주일만에 다시 알고리즘 공부 시작..! 하루에 한문제는 도전하기!
    • List sort는 Collection.sort() 이용.
  2. 동전
    • 풀이
    • 금액을 주어진 동전들의 내림차순으로 나눈다. 나눈 몫이 0이 아닐 때 answer추가하고, 0이라면 다른 동전으로 나눈다.
    • 나머지를 금액으로 초기화하고 반복한다.
    • Intellij의 모든 code Completion을 끔.
    • 테스트 코드를 작성하지 못해 아쉽다.
  3. 거스름돈
    • 풀이
    • 위의 동전문제와 동일
  4. 로프
    • 풀이
    • 주어진 여러개의 로프로 들수 있는 최대 중량 구하는 문제
    • 로프를 오름차순으로 정리한 뒤 작은 값부터 로프의 개수 -1를 곱한다.
    • 곱한 값 중 최대값이 정답
    • List 오름차순은 Collections.sort(), 내림차순은 Collections.sort(list, Collections.reverseOrder());
  5. 30
    • 풀이
    • 주어진 숫자의 자리수로 가장 큰 30의 배수를 출력, 만들 수 없다면 -1 출력 문제.
    • 자리수에 0이 없는지, 더한 자리수가 3의 배수인지로 확인 가능.
    • 풀이보다 자바 문법익히는 데 시간이 더 걸림. 꾸준히해야 몸에 익을 거 같다.
    • split("") 하면 한 단어씩 끊어진다.
    • 기본형 배열 sort : Arrays.sort() / 역순 : Arrays.sort(list, Collections.reverseOrder()); 다만, 기본자료형 배열은 역순이 안된다.
  6. 인턴
    • 풀이실패
    • 주어진 남,녀,인턴 참가자로 만들 수 있는 최대 팀 수 구하는 문제
    • 남 1, 여 2으로 2인 1조. 인턴 참가자는 제외하고 계산해야함.
    • 설계를 잘 못 했는지 반례가 계속 나온다. 추후 도전
  7. 잃어버린 괄호
    • 풀이
    • 괄호가 없는 수식에서 괄호를 사용해서 최소값을 만드는 문제
    • "+"를 split하려면 split("\+")라고 적어야함. 예약된 문자라 그렇다고 함.
    • "-"를 기준으로 괄호를 만들면 된다.
  8. 기타줄
    • 풀이
    • 구매할 기타줄을 패키지와 낱개 가격을 이용해서 최솟값으로 구매하는 문제
    • 패키지와 낱개의 최솟값을 모은 뒤 아래 경우의 수로 계산해서 그 중 최솟값을 출력하기.
    • 3가지 경우
      • 패키지 최소값으로만 구하기
      • 낱개로만 구하기
      • 두 개를 섞어서 구하기
    • 스트림으로 최솟값을 구할 때 : candidate.stream().mapToInt(s -> s).min().getAsInt();
    • getAsInt()가 경고가 뜨는데 어떻게 처리할 지는 고민해보기.
  9. 부등호
    • 풀이
    • 입력된 값을 파싱하는 코드만 추가
    • 백트래킹, DFS, BFS와 관련된 문제라 개념 공부
    • 인터넷 답안보고 해결
  10. 반도체 설계
    • 풀이
    • LIS(Longest Increasing Subsequence) 문제지만 길이만 같고 배열의 원소는 다름.
    • Arrays.binarySearch() 사용 시 원소가 없으면 들어갈 자리가 음수로 나온다. 대신 들어갈 자리 시작은 1부터 시작.
  11. 줄세우기
    • 풀이
    • LIS 변형 문제.
    • 아이들수 - (최장 증가 부분수열의 길이)
  12. 먹이사슬
    • 풀이
    • LIS 변형 문제.
    • 최장 감소 길이 수열.
    • 답을 봤지만 이해가 더 필요.
    • Comparable 구현할 때 오름차순일 경우, 값을 비교한 뒤 작으면 -1, 크면 +1.
    • 내림차순일 경우 값을 비교한 뒤 작으면 +1, 크면 -1.
  13. k번째수
    • 풀이
    • 기본 배열의 정렬을 이해한다면 풀 문제.
  14. 가장 큰 수
    • 풀이
    • Comparator를 잘 활용해서 풀어야하는 문제. 자릿수 별로 비교해 정렬하는 문제
  15. 통계합
전체탐색

문제 검색 : 문제 링크에 들어가서 각 문제 이름 검색하기

  1. KiwiJuiceEasy
    • 풀이
    • 문제를 차근차근 이해하면서 문제 풀어 보기.
  2. InterestingParty
    • 풀이
    • Arrays.asList()로 List 만들면 add, remove 연산을 사용할 수 없다.
    • 기본 배열 합치려면 Collections으로 만들어야 한다.
      • List list = new ArrayList<>(Arrays.asList(first));
    • 주어진 배열을 합친 뒤 전체 탐색하는 문제.
    • HashMap으로 문제 풀이 가능.
  3. Cryptography
  4. ThePalindrome
    • 풀이
    • 전체 탐색 문제.
    • 테스트 코드와 디버거의 힘을 알 수 있었던 문제.
  5. FriendScore
    • 풀이
    • 전체 탐색 문제.
    • 문제 이해를 위해 그래프를 그려봄.
  6. 전화번호 목록
  7. 분해합
  8. 한 줄로 서기
  9. 덩치
  10. 영화감독 숌
이진탐색
  1. 공유기설치
  2. 나무자르기
  3. 숫자카드
  4. 랜선자르기
문자열
  1. 괄호
    • 풀이
    • 스택 이용해서 푸는 괄호 문제
  2. IOIOI
    • 풀이
    • 문자열 패턴 알고리즘 문제
DFS/BFS
  1. 타켓넘버
    • 풀이
    • BFS 기본 문제. 개념만으로는 풀 수 없고 응용을 해야 한다.
  2. 네트워크
    • 풀이
    • Union-Find를 이용한 문제.
  3. DFS와 BFS
    • 풀이
    • 주어진 정점간의 관계를 이차원 배열로 표현한 뒤 dfs, bfs
  4. 바이러스
    • 풀이
    • Union-Find를 조금 응용한 문제
  5. 미로찾기
    • 풀이
    • DFS를 큐로 구현하는 기본 문제
  6. 그림
    • 풀이
    • DFS를 응용한 문제
  7. 토마토
    • 풀이
    • 여러 시작점이 있는 DFS 문제
  8. 불!
    • 풀이
    • 시작점이 다른 종류인 DFS 문제
  9. 숨바꼭질
    • 풀이
    • 1차원 배열 BFS 문제
  10. 단지번호붙이기
    • 풀이
    • 여러 시작점이 있지만 서로 구분해야 하는 문제
  11. 적록색약
    • 풀이
    • 여러 시작점이 있고 시작점의 유형을 구분해야 하는 문제
  12. CrazyBot
    • 풀이
    • DFS이용한 전체 탐색 문제.
    • 좌표 방향에 대한 이해가 오래걸렸던 문제.
  13. 유기농배추
    • 풀이
    • 가로가 먼저 입력되니까 행과 열을 반대로 잘 처리해야하는 문제
  14. 연결 요소의 개수
    • 풀이
    • 평범한 union-find 문제
재귀
  1. 0 만들기
트리
  1. 트리 순회
  2. 트리의 부모 찾기
  3. 트리
  4. 상근이의 여행
  5. 이진검색트리
  6. 문자열집합
  7. 나무 탈출
그래프
  1. 가장 먼 노드
  2. 순위

About

자료구조, 알고리즘 공부 및 문제풀이 저장소


Languages

Language:Java 100.0%