33. 진료순서 정하기
class Solution {
public int[] solution(int[] emergency) {
int[] answer = new int[emergency.length];
for(int i=0; i<emergency.length; i++){
int cnt = 0;
for(int j=0; j<emergency.length; j++){
if(emergency[j] > emergency[i]){
cnt ++;
}
}
answer[i] = cnt+1;
}
return answer;
}
}
<작성한 코드>
answer 배열의 길이는 emergency의 길이만큼 선언하였다. 그 후 2중 for문을 만들어주었다. for문이 실행될 때마다 cnt의 수를 초기화시켰고 반복해 가며 i번째보다 j번째의 값이 크면 cnt에 1씩 더해줬다. 이렇게 해주면 나보다 응급도가 높은 수의 개수가 나온다. 여기에 +1을 해주어서 순서를 지정해 주었다.
34. 순서쌍의 개수
class Solution {
public int solution(int n) {
int answer = 0;
for(int i=1; i<=n; i++){
if(n%i == 0){
answer++;
}
}
return answer;
}
}
<작성한 코드>
for문으로 범위는 1부터 n번째까지 반복시켰다. n% i == 0을 사용하여 i가 n의 약수일 때 answer에 1을 더해주어 약수의 개수를 구해서 리턴하였다. 약수의 개수만큼 순서쌍이 나온다.
35. 개미 군단
class Solution {
public int solution(int hp) {
int answer = 0;
answer += hp/5;
answer += (hp%5)/3;
answer += ((hp%5)%3)/1;
return answer;
}
}
<작성한 코드>
넘겨받은 hp에서 가장 큰 공격력부터 나눠서 필요한 마릿수를 더해갔다. 간단한 문제다.
36. 모스부호(1)
import java.util.HashMap;
class Solution {
public String solution(String letter) {
String answer = "";
StringBuilder answer2 = new StringBuilder();
HashMap<String, Character> morse = new HashMap<String, Character>() {{
put(".-", 'a'); put("-...", 'b'); put("-.-.", 'c'); put("-..", 'd');
put(".", 'e'); put("..-.", 'f'); put("--.", 'g'); put("....", 'h');
put("..", 'i'); put(".---", 'j'); put("-.-", 'k'); put(".-..", 'l');
put("--", 'm'); put("-.", 'n'); put("---", 'o'); put(".--.", 'p');
put("--.-", 'q'); put(".-.", 'r'); put("...", 's'); put("-", 't');
put("..-", 'u'); put("...-", 'v'); put(".--", 'w'); put("-..-", 'x');
put("-.--", 'y'); put("--..", 'z');
}};
for(String a : letter.split(" ")){
answer2.append(morse.get(a));
}
return answer2.toString();
}
}
<작성한 코드>
HashMap을 사용해서 제공된 값을 손수 넣어줬다. 후에 letter의 내용을. split(" ")을 사용해서 공백을 기준으로 하나씩 잘라서 대입했다. morse에 get(받아온 알파벳)을 넣어서 모스부호에 맞는 단어를 answer2에 넣어주었다.
37. 가위 바위 보
class Solution {
public String solution(String rsp) {
String answer = "";
for(int i=0; i<rsp.length(); i++){
if(rsp.charAt(i) == '0'){
answer += 5;
} else if(rsp.charAt(i) == '2'){
answer += 0;
} else{
answer += 2;
}
}
return answer;
}
}
<작성한 코드>
총 3가지 경우의 수에 맞춰 if문을 작성하였다. rsp의 길이만큼 반복해 주면 답을 가지고 있는 answer 문자열을 만들 수 있다.
38. 구슬을 나누는 경우의 수
import java.math.BigInteger;
class Solution {
public BigInteger solution(int balls, int share) {
// 서로다른 n개중 m개를 뽑는 경우의 수 공식 n! / (n-m)! * m!
BigInteger answer = BigInteger.ZERO;
BigInteger numerator = factorial(balls);
BigInteger denominator = factorial(balls - share).multiply(factorial(share));
answer = numerator.divide(denominator);
return answer;
}
public BigInteger factorial(int number){
BigInteger result = BigInteger.ONE;
for (int i = number; i >= 1; i--) {
result = result.multiply(BigInteger.valueOf(i));
}
return result;
}
}
<작성한 코드>
기존에 long형으로 작성을 하였으나 자꾸 특정 테스트 결과가 통과가 안 됐다. 생각해 보니 들어올 수 있는 최대경우의 수가 30!인데 30! 은 long형으로도 담을 수가 없었다. 그래서 BigInteger형으로 바꿔서 사용하였다. 공식에다가 그대로 대입만 해주었다. 문제설명이 살짝 아쉬웠던 게 아닌가 싶은 문제였다.
39. 점의 위치 구하기
class Solution {
public int solution(int[] dot) {
int answer = 0;
if(dot[0] > 0){
if(dot[1] > 0){
answer = 1;
}else {
answer = 4;
}
}
if(dot[0] < 0){
if(dot[1] >0){
answer = 2;
}else {
answer = 3;
}
}
return answer;
}
}
<작성한 코드>
x좌표가 0보다 클 때, 작을때로 한번 나눴고 내부에서 y좌표가 0보다 클때, 작을 때의 조건문을 넣어서 값에 맞는 1, 2, 3, 4분면으로 반환해 주었다.
40. 2차원으로 만들기
class Solution {
public int[][] solution(int[] num_list, int n) {
int listLength = num_list.length / n;
int[][] answer = new int[listLength][n];
int cnt = 0;
for(int i=0; i<listLength; i++){
for(int j=0; j<n; j++){
answer[i][j] = num_list[cnt];
cnt++;
}
}
return answer;
}
}
<작성한 코드>
listLength에 반복해야 할 수를 구해줬다. 후에 2차원배열의 길이를 int [listLength][n]을 해줘서 요구사항에 딱 맞는 배열을 선언했다. num_list에서 꺼내올 위치를 지정해 줄 cnt변수를 만들고 반복문으로 차례대로 값을 대입해 주고 반환했다.
'프로그래머스 문제풀이 > 알고리즘 (JAVA)' 카테고리의 다른 글
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (49~55번 문제풀이) (0) | 2023.09.22 |
---|---|
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (41~48번 문제풀이) (0) | 2023.09.22 |
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (25~32번 문제풀이) (0) | 2023.09.21 |
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (20~24번 문제풀이) (0) | 2023.09.20 |
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (14~19번 문제풀이) (0) | 2023.09.20 |
남건욱's 공부기록