알고리즘 28

[백준] 1167번 트리의 지름

트리의 지름이란, 트리의 노드 중에서 가장 먼 두 정점사의 거리 혹은 경로를 의미한다.  트리의 지름을 구하는 방법은 아래와 같다. 임의의 정점 x에서 가장 먼 정점 y를 찾는다정점 y에서 가장 먼 정점 z를 찾는다정점 y ~ 정점 z 사이의 거리를 구한다 이 문제의 핵심은 정점 y ~ 정점 z 가 트리의 지름이 되는 이유를 이해하는 것이다.  정점 y~ 정점z가 트리의 지름의 양 끝점이 된다는 말의 의미는, 임의의 한점에서 찾은 가장 먼 점은 항상 지름의 양 끝점 중 하나라는 뜻이다. 따라서 그 점에서 가장 멀리 있는 점은 트리의 양 끝점의 또 다른 한 점 이므로, 두 정점 사이의 거리가 트리의 지름이 되는것이다.  임의의 한점에서 가장 멀리 있는점은, 트리 지름의 양 끝점중 하나이다.     임의의 ..

알고리즘/백준 2024.10.30

[백준] 11005 진법 변환2 자바

✅문제 10진법으로 첫번째값으로 주어진다. 이 수를 두번째 값으로 주어진 진법으로 변환하여 출력하는 문제이다    ✅풀이 🧁풀이과정   예를 들어 25를 2진법으로 변환해보자.  25 / 2  ===> 몫: 12 , 나머지:1 12/2   ===>  몫:6 ,    나머지:06/2     ===>  몫:3 ,   나머지: 03/2    ===>  몫:1,    나머지: 11/2    ===>  몫:0,    나머지:1  몫이 0이 되었을때 나머지 값들을 역순으로 읽는다 11001   10 진법의 수를 몫이 0이 되기 전까지 계속 n 의 값으로 나누면서 나머지를 저장한다. 그리고 몫이 0이 되었을때 역순으로 값을 읽는다.  import java.io.*;import java.util.StringToken..

알고리즘/백준 2024.10.03

[프로그래머스] Day12 리스트 자르기

✅ 문제   ✅ 풀이  문제를 보았을때 배열을 조건에 맞는 범위 만큼 자르는 문제였기 때문에 투 포인터를 사용하여 범위만 지정해주고 마지막에 해당 범위의 값들만 출력해주면 되겠다고 생각했다.  class Solution { public int[] solution(int n, int[] slicer, int[] num_list) { int start=0; // 시작 인덱스 int end=num_list.length-1; // 끝 인덱스 int plus=1; // 증가량 switch(n){ case 1: end= slicer[1]; break; ca..

[프로그래머스] Day12 배열 조각하기 자바

✅ 문제  제한 사항  입출력 예시  문제가 이해하기 어렵지는 않은데 주의할건 배열을 자를때 query의 원소값은 인덱스 값이라는 것이다.  짝수 인덱스에서는 query[i] 의 값의 다음 인덱스 부터 없애야하고, 홀수 인덱스에서는 query[i] 값 이전을 없애야한다.   ✅ 풀이  import java.util.*;class Solution { public int[] solution(int[] arr, int[] query) { for(int i =0; i  처음 생각했던 방법은 query를 순회하면서 인덱스를 짝수와 홀수로 구분한다. 인덱스가 짝수인 경우에는 query[i] 값+1 이후의 값을 버리면 되기 때문에  copyOfRange 메서드를 사용하여 (처음~ query[i] +..

[프로그래머스] Day12 2의 영역 자바

문제   풀이 class Solution { public int[] solution(int[] arr) { int[] answer = {}; int start_index=-1; int end_index=-1; // start_index값 찾기 for(int i=0;i 처음 이 문제를 봤을때 생각했던건 처음 2가 나온 인덱스를 체크하고, 마지막으로 2가  나오는 인덱스를 체크하여 두 인덱스 값에 해당하는 원소값들을 정답 배열에 넣으면 되겠다고 생각했다. 그래서 처음 2가 나온 곳을 가리기는 포인터와 마지막으로 2가 나온 곳을 가리키는 포인터 두개가 있으면 문제가 쉽게 풀리겠다고 생각하여 투 포인터로 풀어야 겠다고 생각했다. ..

디버깅

디버깅디버깅이란 버그를 잡아내는 과정을 의미한다즉, 코드에 있는 문법상의 오류나 논리의 오류를 잡아내는 과정을 디버깅이라고 한다. 코드에서 발생하는 문법상의 오류는 컴파일러가 알아서 경고해주기 때문에 발견하기 쉽지만 우리가 짠 코드에서 발생하는 논리 오류는 컴파일러가 알려주지 않기 때문에 디버깅 과정을 통해 스스로 찾아내야 한다. 디버깅 하는 방법오류가 발생했을 것이라 예상되는 지점에 중단점(break point)를 찍고 IDE의 디버깅 기능을 실행하면 된다.디버깅을 하는 자세한 방법은 각자가 사용하는 컴파일러에 따라 조금씩 다를 수 있으므로 검색하여 찾아보면 된다  디버깅을 해야 하는 이유컴퓨터가 코드를 읽는 방법대로 생각할 수 있게 됨알고리즘의 동작 원리를 확실히 이해할 수 있음 디버깅 활용 사례 -..

알고리즘 2024.08.04

시간 복잡도

시간복잡도란 연산의 수행 횟수를 의미한다.일반적으로 컴퓨터는 1초에 1억 번 정도의 연산을 수행한다. 시간 복잡도 표기법빅-오메가 표기법 : 최선일 때 연산 횟수빅-세타 표기법 : 평균일 때 연산 횟수빅-오 표기법 : 최악일 때 연산 횟수코딩 테스트에서는 빅-오 표기법을 기준으로 시간 제한을 고려하는 것이 좋다. 가장 연산이 오래 걸리는 테스트 케이스를 기준으로 알고리즘을 작성한다면 나머지 테스트들은 당연히 통과 할 수 있기 때문이다. 표기 방법은 중괄호 안에 최악일 때의 연산 횟수를 적어주면 된다. 연산 횟수가 N번 이라면 O(N) , N*N 이라면 O(N*N)으로 작성한다.  시간 복잡도 계산법 시간 복잡도를 계산하는 방법은 가장 많이 중첩된 반복문의 횟수가 시간 복잡도의 기준이 된다.또한 시간 복잡..

알고리즘 2024.08.03

정렬

https://velog.io/@jiyaho/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%8B%9C%EA%B0%84-%EC%A0%9C%ED%95%9C%EA%B3%BC-%EC%8B%9C%EA%B0%84-%EB%B3%B5%EC%9E%A1%EB%8F%84 [알고리즘] 시간 제한과 시간 복잡도코딩 테스트에서 문제의 제한 시간은 보통 1~5초 정도이다.일반적인 CPU 기반의 PC나 채점용 컴퓨터에서 1초에 실행할 수 있는 최대 연산 횟수는 velog.io 선택 정렬 선택 정렬이란 정렬 해야하는 값들 중에서 가장 작은수를 선택하여 맨 앞으로 보내는 방법이다.    예를 들어  3 2 4 6 8 1 5 가 있다고 하자. 그렇다면 여기서 가장 작은 수는 1 이므로 1을 맨 앞으로 보낸다. ..