알고리즘

알고리즘/코딩테스트

[프로그래머스] - 131705_삼총사

문제 소개 Level 1 https://school.programmers.co.kr/learn/courses/30/lessons/131705 풀이 public class Pr131705 { public int solution(int[] number) { int answer = 0; for(int i = 0; i < number.length-2; i++) { for(int j = i+1; j < number.length-1; j++) { for(int k = j+1; k < number.length; k++) { if(number[i] + number[j] + number[k] == 0) { answer ++; } } } } return answer; } } 문제는 Bruteforce를 이용해서 풀어보았다..

알고리즘/코딩테스트

[프로그래머스] - 147355_크기가 작은 부분 문자열

문제 소개 Level 1 https://school.programmers.co.kr/learn/courses/30/lessons/147355 테스트 케이스 "2147483649" / "2147483650” / 1 풀이 public class Pr147355 { public int solution(String t, String p) { int answer = 0; int start = 0; int end = p.length(); while(end < t.length()+1) { long tmp = Long.parseLong(t.substring(start, end)); if(tmp

알고리즘/코딩테스트

[프로그래머스] - 12930_이상한 문자 만들기

문제 소개 Level 1 https://school.programmers.co.kr/learn/courses/30/lessons/12930 테스트 케이스 (추가) "AA aa ZZ zz” / "Aa Aa Zz Zz” "aaa “ / "AaA “ 풀이 public class Pr12930 { public String solution(String s) { StringBuilder answer = new StringBuilder(); int count = 0; for(char ch: s.toUpperCase().toCharArray()) { if(ch == ' ') { answer.append(ch); count = 0; } else if(count % 2 != 0) { answer.append((char)(..

알고리즘/코딩테스트

[프로그래머스] - 12982_예산

문제 소개 Level 1 https://school.programmers.co.kr/learn/courses/30/lessons/12982 테스트 케이스 (추가) [1,1,1,1,1] / 10 / 5 풀이 import java.util.Arrays; public class Pr12982 { public int solution(int[] d, int budget) { int answer = budget; Arrays.sort(d); for(int i = 0; i < d.length; i++) { answer -= d[i]; if(answer < 0) { return i; } else if (answer == 0) { return i+1; } } return d.length; } } sort() 후 정렬된 ..

알고리즘

투 포인터

이번에는 투 포인터 알고리즘에 대해서 정리해보려고한다. Two Pointer? 투 포인터 알고리즘은 하나의 배열에서 두개의 원소를 가리키는 서로 다른 인덱스를 움직이며 답을 내는 알고리즘이다. 한 방향으로만 인덱스를 증가시켜 원하는 값을 얻어오게되는 것이다. 예를 들어 살펴보자. (1 3 5 7 9, 연속된 여러 원소의 합이 10을 넘는 경우가 몇 번있는가?) 1회 start : 0, end : 1, cnt : 0 sum : 1 + 3 = 4 합계가 10을 넘지 않으므로 end를 1증가 시킨다. 2회 start : 0, end : 2, cnt : 0 sum : 1 + 3 + 5 = 9 합계가 10을 넘지 않으므로 end를 1증가 시킨다. 3회 start : 0, end : 3, cnt : 0 sum : ..

알고리즘

이분 탐색

이번에는 이분 탐색에 대해서 정리해볼 것이다. 이분탐색이란? 정렬되어 있는 배열에서 특정한 값을 찾아내는 알고리즘이다. 배열에서 중간 값을 선택하여 찾는 값과 비교하고, 중간 값이 찾는 값 보다 작다면 우측을 대상으로 찾는 값 보다 크다면 좌측을 대상으로 탐색을 진행해나가며 탐색범위를 반씩 줄여나가는 탐색 방식이다. 예를 들어 살펴보자. ( 2 3 5 7 9 13 15 20, 찾는 값 = 9 ) 1회차 2 3 5 7 9 13 15 20 가운데 값인 7을 선택하여 찾는 값인 9와 비교한다. 중간 값이 더 작기 때문에 우측을 기준으로 탐색을 진행한다. 2회차 9 13 15 20 이번에도 역시 가운데 값인 13을 선택해서 찾는 값인 9와 비교한다. 중간 값이 더 크기 때문에 좌측을 기준으로 탐색을 진행한다. ..

알고리즘

삽입 정렬

이번에는 삽입 정렬에 대해서 정리해보려고한다. 삽입 정렬이란? 삽입 정렬은 두 번째 자료부터 시작해서 그 앞의 자료와 비교하여 교환하는 방식의 알고리즘이다. 두 번째는 첫 번째 자료와 비교하여 교환하고, 세 번째는 두 번째와 첫 번째자료와 비교하여 교환하는 방식으로 진행된다는 것이다. 이미 정렬된 부분과 비교하여 교환하면서 자기 자리를 찾아 삽입하기에 삽입 정렬이라고 불린다. 예를 들어 살펴보자. (8 5 6 2 4) 1회전 8 5 6 2 4 → 5 8 6 2 4 2회전 5 8 6 2 4 → 5 6 8 2 4 3회전 5 6 8 2 4 → 5 6 2 8 4 → 5 2 6 8 4 → 2 5 6 8 4 4회전 2 5 6 8 4 → 2 5 6 4 8 → 2 5 4 6 8 → 2 4 5 6 8 위처럼 선택된 인덱..

알고리즘

버블 정렬

이번 글에서는 버블 정렬에 대해서 알아보려고 한다. 버블 정렬이란? 두 개의 인접한 원소를 검사하여 정렬하는 알고리즘이다. 예를 들어, 첫 번째와 두 번째를 비교하고 교환하고 두 번째와 세 번째를 비교하여 교환하는 식으로 진행하여 n 번째와 n+1번째 자료를 비교하고 교환하여 정렬을 진행한다. 버블 정렬의 특징으로는 맨 끝의 자료는 정렬이 완료되었기에 제외된다는 점에 있다. 그렇기에 마지막 요소는 반복문에서 제외한다. 예를들어 살펴보자 ( 5 3 4 1 2 ). 1회전 5 3 4 1 2 → 3 5 4 1 2 → 3 4 5 1 2 → 3 4 1 5 2 → 3 4 1 2 5 2회전 3 4 1 2 5 → 3 4 1 2 5 → 3 1 4 2 5 → 3 1 2 4 5 3회전 3 1 2 4 5 → 1 3 2 4 5..

알고리즘

선택 정렬

이번 글은 선택 정렬에 대해서 정리해보려고 한다. 선택 정렬이란? 선택 정렬은 정해진 순서에 들어갈 원소를 찾는 정렬이다. 첫 번째 순서에는 첫 번째 위치에 가장 최솟값을 찾아서 교환한다. 두 번째 순서에는 두 번째 최솟값을 찾아서 교환한다. 이를 계속 반복해서 정렬을 진행하게 된다. 예를 들어 설명해보겠다. ( 9 6 7 3 5 ) 1회전 9 6 7 3 5 → 3 6 7 9 5 2회전 3 6 7 9 5 → 3 5 7 9 6 3회전 3 5 7 9 6 → 3 5 6 9 7 4회전 3 5 6 9 7 → 3 5 6 7 9 위처럼 숫자 배열 안에서 가장 작은 숫자를 찾아서 현재 인덱스에 들어갈 숫자를 찾아서 교환하는 방식으로 이루어진다. 각 회전에 대한 설명은 다음과 같다. 1회전에서는 첫 번째 자리에 가장 작..

ppusda
'알고리즘' 카테고리의 글 목록 (2 Page)