알고리즘 143

[Algorithm] 순열(permutation) for JAVA

순열 순열이란 n개의 원소 중에 r개를 순서를 고려해 뽑는 방법이다. 예를 들어 [1,2,3] 이 있을 때 2개를 뽑는다면 n = 3, r = 2가 될 것이고 표현은 3P2 라고 한다. [1, 2] [1, 3] [2 ,1] [2, 3] [3, 1] [3, 2] 6개가 나올 것이고 원소의 개수는 n! 개이다. 나는 DFS로 이것을 표현할 것이다~ DFS로 순열을 표현하면 위의 순서를 따르며 진행될 것이다. 코드 static void permutation(int[] arr, int[] output, boolean[] visited, int depth, int n, int r) // arr[] = {1,2,3} // output[] = 만들어진 원소 ex) {2,1,3} 등 // visited[] = 위 그림..

[프로그래머스] 두 정수 사이의 합 for JAVA

https://programmers.co.kr/learn/courses/30/lessons/12912 코딩테스트 연습 - 두 정수 사이의 합 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 제한 조건 a와 b가 같은 경우 programmers.co.kr 연습 문제라서 너무 쉬움 ㅠㅠ 코드 class Solution { public long solution(int a, int b) { long answer = 0; if(a > b){ int i = a; a = b; b = i; } for(long i = a; i

[BaekJoon] 백준 1789번 _ 수들의 합 for JAVA _ 그리디 알고리즘

https://www.acmicpc.net/problem/1789 1789번: 수들의 합 첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다. www.acmicpc.net 당연히 작은 수부터 더해가면서 살펴보면 된다. 200은 왜 출력이 19냐면 1 + 2 + 3 + … + 18 + 29 해서 19개가 된다. 여기서 ... 18 + 19 = 190 이라서 10은 중복 사용을 못하므로 그냥 29를 더해버려야 한다. 다른 숫자도 마찬가지고 나누어 떨어지지 않으면 그냥 + 나머지수 일케 해야함 코드 package Baek; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; ..

알고리즘/백준 2022.02.16

[프로그래머스] 나누어 떨어지는 숫자 배열 for JAVA

https://programmers.co.kr/learn/courses/30/lessons/12910 코딩테스트 연습 - 나누어 떨어지는 숫자 배열 array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하 programmers.co.kr arrayList에 나누어 떨어지는 숫자만 넣고 배열에 다시 넣어주는 형태로 했다. 코드 import java.util.*; class Solution { public int[] solution(int[] arr, int divisor) { int[] answer; ArrayList arrayL..

[프로그래머스] 같은 숫자는 싫어 for JAVA

https://programmers.co.kr/learn/courses/30/lessons/12906 코딩테스트 연습 - 같은 숫자는 싫어 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 programmers.co.kr 스택 사용함 HashSet 사용할까 했는데 hashset은 get()으로 가져올 수 없는걸 알게됐다.~ 스택 사용했는데 음~ for문으로 stack.pop() 해서 하나씩 배열에 저장할까 했는데 이렇게하면 stack은 Integer 형이고 answer[]는 int 형이라 저장이...안된다. 다 0으로 저장됨 그래서 for each문으로..

[프로그래머스] 가운데 글자 가져오기 for JAVA

https://programmers.co.kr/learn/courses/30/lessons/12903 코딩테스트 연습 - 가운데 글자 가져오기 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다. 재한사항 s는 길이가 1 이상, 100이하인 스트링입니다. 입출력 예 s ret programmers.co.kr 코드 class Solution { public String solution(String s) { String answer = ""; if(s.length() % 2 == 0) answer += s.substring(s.length() / 2 - 1, s.length() / 2 + 1); else answer += s.su..

[프로그래머스] 2016년 for JAVA

https://programmers.co.kr/learn/courses/30/lessons/12901 코딩테스트 연습 - 2016년 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까 programmers.co.kr 윤년이면 2월에 29일까지 있는 날이다. 그래서 1월 31일, 2월 29일, 3월 31일, 4월 30일, 5월 31일, 6월 30일, 7월 31일, 8월 31일, 9월 30일, 10월 31일, 11월 30일, 12월 31일 까지 있음. 그리고 1/1이 금요일이고 요일은 7개니까 찾는 월 전까지의 월수와 일수를 더해서 7로 ..

[프로그래머스] 카펫 for JAVA _ 완전 탐색 알고리즘

https://programmers.co.kr/learn/courses/30/lessons/42842 코딩테스트 연습 - 카펫 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 programmers.co.kr x = 가로, y = 세로 크기라고 하면 1. (x - 2) * (y - 2) = yellow 2. x * y = brown + yellow 가 된다. 코드 class Solution { public int[] solution(int brown, int yellow) { int[] answer = new int[2]; int area = brown + yel..

[프로그래머스] 소수 찾기 for JAVA _ 완전 탐색 알고리즘 + 순열, 소수찾기

https://programmers.co.kr/learn/courses/30/lessons/42839 코딩테스트 연습 - 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 programmers.co.kr 어려워 고려해야할점은 1. 숫자 조합하기 2. 소수인지 확인 소수인지 확인하는 방법은 에라토스테네스의 체를 사용함 숫자를 조합하는게 문제인데 누가봐도 순열임 순열이 뭐냐면 예를 들어 numbers = 0,1,2,3 이었다고 하면 나올 수 있는 수가 1자리수 : 0, 1, 2, 3 2자리수 : 01, 02, 03, 10, 12, 13, 20, 21,..

[프로그래머스] 모의고사 for JAVA _ 완전탐색 알고리즘

https://programmers.co.kr/learn/courses/30/lessons/42840 코딩테스트 연습 - 모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 programmers.co.kr 완전탐색 유형에 있는 level1짜리 문제이다. 학생 1,2,3의 문제 번호는 계속 반복되므로 이걸 answer의 길이만큼 반복해서 비교해야 한다. 코드 import java.util.ArrayList; class Solution { public int[] solution(int[] answers) { int[] answer = {}; int[] student1..