Skip to content

sihyunjojo/java_algo

Repository files navigation

알고리즘 과제 🗂️

📝 File Naming Convention

문제 풀이 파일은 '플랫폼_레벨_문제_이름_메모.java' 형태의 네이밍 사용

ex)
Bj_S1_문제_이름_메모.java
Swea_d2_문제_이름_메모.java

📁 FOLDER STRUCTURE

날짜 기준 폴더링 구조

240131(과제 제출 날짜 기준 폴더 생성)
ㄴ Swea_d2_2001_파리퇴치_(Sovled,Best).java
240201
ㄴ Bj_S4_1244_스위치끄고켜기.java

📚Check Table

알고리즘 유형 문제 코드 메모
구현 Swea_1767_프로세서연결하기 Swea_1767_프로세서연결하기 여기에서 문제는 프로세서당 가능한 dir을 class에 넣어줘서 해결하는 것
그리고 temp_board를 마지막에 init_board(처음 받아온 것)으로 원복해주는 것
구현 Bj_G4_17471_게리맨더링 Bj_G4_17471_게리맨더링 순열이나 부분집합으로 01로 짠 후에 1이면 a에 넣고 0이면 b에 넣는 방식으로 구현.
그리고 연결되어 있는지 체크할때, 리스트에 contains()되어 있는 값만 체크해서 cnt가 같으면 true를 똭!!!!!
DFS Swea_1949_등산로조성 Swea_1949_등산로조성 최고로 긴거니까 dfs를 사용.
그리고 dfs에서 부쉇는지 check하는 인자를 넣어서 부술 수 있는 경우의 수를 체크!!
구현 Swea_2115_벌꿀채취 Swea_2115_벌꿀채취 제곱 값을 비교할 때, 그냥 원래 값이 큰거랑 제곱 값이 큰거랑 다른거여서 확실하게 최종적으로 제곱 값을 비교를 해줘야하는 문제.
BFS Swea_2117_홈방범서비스 Swea_2117_홈방범서비스 index = n+1; 이걸 안해서 고민을 했던 문제. +1 을 안하면 모서리가 체크가 안됨.
BFS Swea_5653_줄기세포배양 Swea_5653_줄기세포배양 살아 있는 세포를 List로 관리하고 1. 죽은 세포는 빼주고 2. 그 리스트를 value로 내림차순 정렬을 해주는 거야.
board에 값 추가해주고, 그 값이 0이 아니면 안해주고 0만 해주는 걸로.
구현 Swea_2382_미생물격리 Swea_2382_미생물격리 문제의 한 단계 한 단계를 확실히 체크하고 가야한다.
클래스로 미생물을 써서 dir을 함수로 편하게 관리하고, x와y를 정렬해주기 편하게 하면 좋음.
뺄때 2중 for문에서 i--만 해주면 됨.
equals 메서드는 웬만하면 재정의 하지말고, if문으로 하기 // 만약 할꺼면 remove나 기본 함수 쓸때 인자 class로 쓰는거 조심.
구현 Swea_2112_보호필림 Swea_2112_보호필림 for문을 사용할 때, 다시 쓸것들을 반드시 초기화를 무조건 반드시 해줘야한다.
temp_board를 원복해주는 것도 중요!!
BFS Swea_2105_디저트카페 Swea_2105_디저트카페 대각선 bfs, 제발 그냥 for 전체를 전부 bfs로 해주면 편한문제.
init_x,init_y를 써서 초기 값을 인자로 넣어주는 문제.
리스트 관리를 잘해야하는 문제.
전체 디저트를 배열로 관리해서 거기에 이미 1이 들어있으면 리턴하게 해주면 편하개 풀 수 있는 문제
DFS Bj_G2_3109_빵집 Bj_G2_3109_빵집 문제를 잘 생각해서 이미 간 곳은 의미가 없으므로 visitied를 그냥 계속 두는는게 핵심인 문제.
그리고 성공하면 하나씩 세는 문제는 return true;를 해주고 true이면 res++ 해주는게 좋다.
구현 Bj_G5_15686_치킨배달 Bj_G5_15686_치킨배달 치킨 집과 가정 집을 리스트로 둘 다 선언 (특정한 것은 리스트로 선언해서 어떻게 하면 조금 더 쉬울 지도?)
순열과 조합은 코드 작성하고 잘 되는지 한번 출력해보고 넘어가자
bfs 돌리면서 가장 가까운 애들 찾아도 되지만, 그냥 치킨집과 가정집들 dis를 구해서 가장 작은거 해줘도 됨.
BFS Bj_G3_2636_치즈 Bj_G3_2636_치즈 처음부터 해서 0을 BFS에 넣어주고 1인 부분은 지워만 주고 queue에는 넣지않는 기가막힌 방법을 쓰는 문제
visited와 queue에 넣는 것을 너무 무의식적으로 당연하게 넣지는 말자.
BFS Bj_S2_4963_섬의개수 Bj_S2_4963_섬의개수 for문으로 하면서 섬이면 거기서부터 bfs해서 다 바꿔주고 cnt를 추가하는 문제였지.
구현 Swea_2383_점심식사시간 Swea_2383_점심식사시간 부분 집합해서 마지막에 3명이 0이면 피니시 플래그를 바꿔주고 피니시 플래그가 3이면 break를 해주면 된다.
윈도우 슬라이싱 Bj_S2_12891_DNA비밀번호 Bj_S2_12891_DNA비밀번호 슬라이싱에 대한 개념 외우기
Stack Bj_G5_2493_탑_Fail Bj_G5_2493_탑_Fail 순차적으로 된 형태?? 그걸 스택 형태로 빠르게 해결할 수 있는 방법 외우기

📚Algo Table

알고리즘 유형 문제 정보 문제 메모
구현 시뮬레이션 Bj_Silver4_1244_스위치켜고끄기
완전 탐색 Swea_D3_1208_Flatten
Swea_D3_2805_농작물수확하기
Swea_D4_1210_Ladder1
Swea_D2_1954_달팽이숫자
Bj_S3_6603_로또
부분 집합 Bj_S2_2961_도영이가만든맛난음식
Swea_D2_2001_파리퇴치
Swea_D3_5215_햄버거다이어트
Swea_d3_6808_규영이와인영이의카드게임
누적합 알고리즘 Bj_S1_11660_구간합구하기5
Bj_S3_11659_구간합구하기4
Bj_S4_1158_요세푸스문제 자료구조 문제.
백트래킹 순열 Bj_silver3_15649_n과m1
Bj_silver3_15649_n과m3
조합 Bj_B3_3040_백설공주와일곱난쟁이
Bj_S3_15650_n과m2
Bj_S3_15650_n과m4

📚Fail Table

  • 외울때 까지 무한 반복
알고리즘 유형 문제 정보 문제 메모 복습(5)
구현 윈도우 슬라이싱 Bj_S2_12891_DNA비밀번호 슬라이싱에 대한 개념 외우기 1
비트 마스킹 Bj_S5_11723_집합_Best 비트마스킹 하는 전체 방식 외우기 1
자료구조 Stack Bj_G5_2493_탑_Fail 순차적으로 된 형태?? 그걸 스택 형태로 빠르게 해결할 수 있는 방법 외우기 1

💻 📋 알고리즘 종류

  • 투 포인터
  • 이진 탐색
  • 비트 마스킹
  • 누적합
  • 윈도우 슬라이싱
  • 재귀 알고리즘
  • BFS
  • DFS
  • 조합
  • 순열
  • 가지치기
  • 데이크스트라
  • 백트래킹
  • 트리
  • 스위핑
  • 라인 스위핑
  • 분할 정복
  • 우선 순위 큐
  • 최단 경로
  • 소수 판정
  • 최소 스패닝 트리
  • 유클리드 호제법
  • 플로이드 워셜
  • Deque
  • Queue
  • Stack
  • 외판원 순회 문제
  • 0-1 BFS
  • 이분 그래프
  • 비둘기집 원리
  • 연결 리스트
  • 간선 리스트
  • 메모리제이션
  • 유니온 파인드
  • LIS
  • 최단거리
  • 팬웍트리
  • 트리순회
  • 에라스토테네스의 체

📚 숙제

02.01

비트마스킹이랑
자바 슬라이싱 윈도우 달달 외우기

누적합 알고리즘 외워서 자주 적용시키기
이전거 + 현재거 / 결과 = [a-1] - [b]

02.02

윈도우 슬라이스 예시 항상 상기시켜서 잘 외워두기

02.03

자료구조를 사용하자!
수학적으로 풀려고 고집 부리지말자!

02.04

출력에는 StringBuilder 사용하자!

02.09

스택 (문제 탑) 유형 외우기. (구현)문제의 과정이 어떻게 되는지 완벽히 이해를 하고 코딩을 하자
무작정 맘대로 생각하고 구현하지말고.

02.10

우선순위 큐 자료구조 정리하기.
제발 출력 양식 잘 읽고 지키기...

2.13

np 외우기
원하는 결과 값이 배열을 반드시 쓰지 않아도 되는 방식 이라면, 배열이 아닌 첫값과 끝값을 통해서 결과값을 유도해보는 방식도 고려하자.

02.16

정점이 움직이는 문제를 풀 때, 모든 정점이 겪을 수 있는 경우의 수를 모두 생각해보자. 정점 2개가 움직이면 더 많이 갈리겠지???

02.20

// 줄기세포배양 재귀에서 time을 time에 따라서 함수들의 순서를 어떻게 구현하고 안에 time인자가 들어가야하는 부분을 어떻게 설정해야할지에 대해서 고민이 조금 더 필요함.

02.21

어디서든지 true를 해주면 false를 해줘야한다.

02.22

모든 문제의 햇갈릴만한 부분을 주석으로 전부 적고 시작.

02.23

순조부에서 하나를 선택할 수 있는 문제인지 항상 생각하기
그 이후에 그래프든지 조건을 해결하고
답을 구하는 문제인지 항상 미리 생각하기

02.28

for 문보다
for each문이 훨씬 빠름.
자료형 주의 int -> long

02.29

isvisited = new boolean[h][w][k + 1]; // 이 아이디어가 핵심이다.
bfs();
if (res == 0) res = -1;
if (w == 1 && h == 1) res = 0; // 이것도 조심해야할듯 애매하게 항상 하나 틀릴듯

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published