코딩테스트 진행하다가 순열사용할 때 재활용할 수 있을 것같아서 올려 둔당. 문자열에서 각 문자 별로 모든 경우의 수를 구하다가 사용하게 된 순열 알고리즘 중복 제거를 위해 HashSet을 사용했다. String s = "aab" 이면 aab, aba, baa 가 나온다. import java.util.*; class Solution { // 문자열로 만들 수 있는 모든 경우의 수 (중복x) public HashSet allSet; public void solution(String s) { allSet = new HashSet(); permutation("", s); } // 모든 경우의 수를 구하는 순열 public void permutation(String prefix, String s) { int n..
1. 문제 https://www.acmicpc.net/problem/1475 1475번: 방 번호 첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다. www.acmicpc.net 2. 설명 0에서 9까지의 숫자의 수를 담은 배열 numSet을 선언했다. 6과 9는 뒤집어서 사용할 수 있기 때문에 한 곳에 모았으며, (6에 모았다) 6을 2로 나눠주었다. 나머지가 있을 경우엔 한 세트가 더 필요하기 때문에 더해줬다. 그리고 int 배열로 선언해줬기 때문에 내림차순 정렬인 reverseOrder를 사용할 수 없어서, 그냥 오름차순 해주고 마지막 요소를 출력해줬다 ! 3. 코드 import java.io.BufferedReader; import java.i..
1. 문제 https://www.acmicpc.net/problem/1152 1152번: 단어의 개수 첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 � www.acmicpc.net 2. 설명 문자열 앞과 뒤에 공백이 올 수 있기 때문에 입력받은 문자열을 trim 함수를 이용해 공백제거를 해준다. 그리고 공백 기준으로 split 해줬다. 그리고 입력이 ' ' (공백만 있을 경우)일 경우에도 고려해줘야 한다. 공백만 입력받을 경우를 생각을 못해서 틀렸었다. 3. 코드 import java.io.BufferedReader; import java.io.IOExce..
1. 문제 https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 2. 설명 문자열 처리 파트의 문제. 정답 출력을 대문자로 하기 때문에 대문자로 캐스팅해줬다. 그리고 문자 하나씩 비교해서 maxAlpha를 구해갔다. 3. 코드 import java.util.StringTokenizer; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main ..
1. 문제 https://www.acmicpc.net/problem/1049 1049번: 기타줄 첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주 www.acmicpc.net 2. 설명 묶음으로 구매할 때와 낱개로 구매할 때의 경우를 따로 집합에 삽입해 오름차순으로 정렬했다. 그리고 묶음으로 구매할 때 vs 낱개로 6개를 구매할 때를 비교해서 작은 값을 구했다. (minBundle) 정답의 경우 예를 들어, 14개를 구매할 경우, 3묶음(18)으로 구매할 경우와 2묶음(12) + 2개로 구매할 경우를 비교해 최솟값을 출력하도록 했다. 3. 코드 impor..
1. 문제 https://www.acmicpc.net/problem/2217 2217번: 로프 N(1≤N≤100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하지만 www.acmicpc.net 2. 설명 왜 그리디에 있는지 모르겠는 문제. 최대 중량을 구하는 것이라서 배열을 한번 순환했다. 문제를 읽어보면 해당 로프가 버틸 수 있는 최소 중량 * 로프 수 라는 식이 나온다. 그거 계산해서 최댓값 구하면 된다. 3. 코드 import java.util.Arrays; import java.util.StringTokenizer; import java.io.BufferedRea..
1. 문제 https://programmers.co.kr/learn/courses/30/lessons/42627 코딩테스트 연습 - 디스크 컨트롤러 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를�� programmers.co.kr 2. 설명 우선순위 큐(waiting)를 사용했다. 먼저 jobs를 요청시간로 정렬하고, 현재 시간(time)에서 진행할 수 있는 작업을 waiting에 삽입했다. waiting은 빨리 끝나는 작업 순으로 정렬되어 있기 때문에 하나씩 꺼내서 시간을 추가해줬다. waiting이 비어있을 경우, 현재 진행할 수 있는 작업이 없으므로 time을 1..
1. 문제 https://programmers.co.kr/learn/courses/30/lessons/42842 코딩테스트 연습 - 카펫 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 �� programmers.co.kr 2. 설명 완전탐색 문제라서 모든 경우의 수를 고려했다. 일단 가로 세로 곱과 합은 식을 세워서 선언해뒀고, 하나씩 대입해보면서 곱과 합이 일치하는지 확인하며 풀어나갔다 ! 3. 코드 class Solution { public int[] solution(int brown, int yellow) { int[] answer = new int[2]..
- Total
- Today
- Yesterday