Java 알고리즘 잡기술 모음

2021. 12. 10. 01:45· JAVA

이 페이지는 알고리즘을 공부하면서 빠른 구현을 위한 잡기술들을 모아놓았습니다.

추후에 학습하면서 더 좋은 기술을 발견하면 꾸준히 업데이트 할 예정입니다.

 

 

 

2차원 배열에서 y, x의 위치

int n = 3; // 세로의 길이
int m = 4; // 가로의 길이


int[][] board = new int[3][4];
int index = 1;
for(int i = 0; i < n; i++)
	for(int j = 0; j < m; k++)
    	board[i][j] = index++;
        
// target의 y,x의 좌표
int target = 10;
int y = (target-1) / m;
int x = (target-1) % m;

// 결과 y = 2, x = 1

 

 

 

칸 채우기

// 2차원 배열
int n = 3;
int[][] board = new int[n][n];

int y = 0;
int x = 0;
int index = 0;

// 아래로 칸 채우기
while(y + 1 < n)
{
	board[++y][x] = ++index;
}

 

 

 

2차원 배열안의 정사각형 탐색

// DP를 활용

int n = 3; // 세로
int m = 4; // 가로

// 왼쪽, 왼쪽 위, 위쪽을 탐색한다.

int answer = 0;
int[][] dp = new int[n+1][m+1];

for(int i = 1; i < n+1; i++)
{
	for(int j = 1; j < m+1; j++)
	{
		int one = Math.min(dp[i-1][j], Math.min(dp[i-1][j-1], dp[i][j-1]));
	if(board[i-1][j-1] == 1)
		dp[i][j] = one + board[i-1][j-1];
	else 
		dp[i][j] = 0;
	answer = Math.max(answer, dp[i][j]);
	}
}

answer = answer * answer;

 

 

 

진수 변환하기

int n = 2; // 변환하고 싶은 진수, 예시는 2진수
String convnum = ""; // 변환한 수를 담을 변수
int number = 7; // 진수 변환하고 싶은 숫자

while(number > 0)
{
	convnum = number % n + convnum;
	number = number / n;
}

 

 

 

정렬

// 내림차순 정렬
ArrayList<Integer> list = new ArrayList<>();
Collections.sort(list, (o1, o2) -> o2 - o1);

// comparator를 이용한 정렬
// music 클래스의 play를 기준으로 내림차순 정렬
// play가 같다면 index를 기준으로 오름차순 정렬
class music
{
	int index;
    int play;
    
    public music(int index, int play)
    {
    	this.index = index;
        this.play = play;
    }
}

ArrayList<music> list = new ArrayList<>();
Collections.sort(list, new Comparator<music>() {

	@Override
    public int compare(music o1, music o2)
    {
    	int result = o2.play - o1.play;
        
        if(result == 0
        {
        	return o1.index - o2.index;
        }
        
        return result;
    }

});

 

 

 

이분탐색 (Binary Search)

// 배열(탐색에 성공하면 1, 없으면 0을 반환)
public static int binarySearch(int target, int[] arr)
{
	int n = arr.length;
    
    int start = 0;
    int end = n-1;
    int mid;
    
    while(start <= end)
    {
    	if(arr[mid] == target)
        	return 1;
        else if(arr[mid] < target)
        	start = mid + 1;
        else 
        	end = mid - 1;
    }
    
    return 0;

}

 

 

 

유니온 - 파인드

// n은 갯수, 처음에 부모는 자기자신
static int[] parent = new int[n];
for(int i = 0; i < n; i++)
	parent[i] = i;

// 부모를 찾아주는 함수
public static int find(int a)
{
    if(parent[a] == a)
    	return a;
    else
    	return parent[a] = find(parent[a]);
}

// 부모를 합치는 함수
public static void union(int a, int b)
{
    a = find(a);
    b = find(b);
    
    if(a != b)
    	parent[b] = a;
}

 

 

 

class 내 정렬

class Dot implements Comparable<Dot>
{
	int spot;
    int money;
    
    Dot(int spot, int money)
    {
    	this.spot = spot;
        this.money = money;
    }
    
    @Override
    public int compareTo(Dot e)
    {
    	return this.money - e.money;
    }
}

 

 

 

 

너지살
너지살
너지살
너지살개발자
너지살
전체
오늘
어제
  • 분류 전체보기 (375)
    • 잡식 (2)
      • 티스토리 (2)
    • 개발 일지 (0)
      • OMS 프로젝트 (4)
      • 우테코 6기 프리코스 (1)
    • Git (2)
    • JAVA (15)
      • Java 공부 (6)
      • 자료구조 (4)
      • 도움되는 메모 (4)
    • DevOps (18)
      • AWS (6)
      • Docker (2)
      • Jenkins (1)
      • Nginx (1)
      • Kafka (6)
      • RabbitMQ (2)
    • Spring, Spring Boot (16)
      • Test Code (1)
      • AOP (2)
      • Batch (3)
      • Cache - Redis (5)
      • Cloud Config - 설정 파일 관리 (3)
      • 성능 측정 (1)
      • 예외 처리 (1)
    • BackEnd (1)
      • Spring 공부 (1)
      • Thymeleaft (0)
    • DB (17)
      • JPA (2)
      • DB 공부 (3)
      • DB 포스팅 (4)
      • DB 답장 (1)
      • MySQL (2)
      • Redis (5)
      • MongoDB (0)
    • CS (8)
      • Spring (4)
      • DataBase (3)
      • Java (1)
    • Algorithm (203)
      • 알고리즘 개념 (5)
      • 정렬 알고리즘 (11)
      • 프로그래머스 문제풀이 (18)
      • 백준 문제풀이 (165)
      • 소프티어 문제풀이 (3)
      • 알고리즘 시험 정리 (1)
    • SQL (0)
      • 문법 (1)
      • 프로그래머스 문제풀이 (52)
      • 리트코드 문제풀이 (19)
    • IT (1)
      • IT 공부 (1)
    • 정리 (10)
      • 질문 정리 (10)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Test code
  • 다이나믹 프로그래밍
  • Java 정리
  • 최소 스패닝 트리
  • 최소 신장 트리
  • 투포인트
  • 소프티어
  • git
  • 그래프 탐색
  • Union-Find
  • dynamic programing
  • 백준
  • 크루스칼 알고리즘
  • 다이나믹프로그래밍
  • 설정
  • 다음 순열 찾기
  • 부분탐색
  • 알고리즘
  • 질문 정리
  • two pointer
  • Spring Boot Redis 연결
  • 그래프 이론
  • 데이터베이스
  • docker
  • dynamiceprogramming
  • 우선수위큐
  • 유니온파인드
  • cache
  • Next permutation
  • 병렬 처리
  • 비트마스킹
  • 자료구조
  • DFS
  • Algorithm
  • JPA
  • 투 포인터
  • Java
  • 두 포인터
  • 외판원 순회 문제
  • DP
  • Bitmast
  • 깊이/너비 우선탐색
  • 분리 집합
  • db
  • redis
  • Spring Boot
  • Sorting algorithm
  • 경로표현식
  • Spring Batch
  • MST

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
너지살
Java 알고리즘 잡기술 모음
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.