728x90
반응형
SMALL

문제 설명

사진들을 보며 추억에 젖어 있던 루는 사진별로 추억 점수를 매길려고 합니다. 사진 속에 나오는 인물의 그리움 점수를 모두 합산한 값이 해당 사진의 추억 점수가 됩니다. 예를 들어 사진 속 인물의 이름이 ["may", "kein", "kain"]이고 각 인물의 그리움 점수가 [5점, 10점, 1점]일 때 해당 사진의 추억 점수는 16(5 + 10 + 1)점이 됩니다. 다른 사진 속 인물의 이름이 ["kali", "mari", "don", "tony"]이고 ["kali", "mari", "don"]의 그리움 점수가 각각 [11점, 1점, 55점]]이고, "tony"는 그리움 점수가 없을 때, 이 사진의 추억 점수는 3명의 그리움 점수를 합한 67(11 + 1 + 55)점입니다.

그리워하는 사람의 이름을 담은 문자열 배열 name, 각 사람별 그리움 점수를 담은 정수 배열 yearning, 각 사진에 찍힌 인물의 이름을 담은 이차원 문자열 배열 photo가 매개변수로 주어질 때, 사진들의 추억 점수를 photo에 주어진 순서대로 배열에 담아 return하는 solution 함수를 완성해주세요.


제한사항

  • 3 ≤ name의 길이 = yearning의 길이≤ 100
    • 3 ≤ name의 원소의 길이 ≤ 7
    • name의 원소들은 알파벳 소문자로만 이루어져 있습니다.
    • name에는 중복된 값이 들어가지 않습니다.
    • 1 ≤ yearning[i] ≤ 100
    • yearning[i]는 i번째 사람의 그리움 점수입니다.
  • 3 ≤ photo의 길이 ≤ 100
    • 1 ≤ photo[i]의 길이 ≤ 100
    • 3 ≤ photo[i]의 원소(문자열)의 길이 ≤ 7
    • photo[i]의 원소들은 알파벳 소문자로만 이루어져 있습니다.
    • photo[i]의 원소들은 중복된 값이 들어가지 않습니다.

입출력 예

name yearning photo result

["may", "kein", "kain", "radi"] [5, 10, 1, 3] [["may", "kein", "kain", "radi"],["may", "kein", "brin", "deny"], ["kon", "kain", "may", "coni"]] [19, 15, 6]
["kali", "mari", "don"] [11, 1, 55] [["kali", "mari", "don"], ["pony", "tom", "teddy"], ["con", "mona", "don"]] [67, 0, 55]
["may", "kein", "kain", "radi"] [5, 10, 1, 3] [["may"],["kein", "deny", "may"], ["kon", "coni"]] [5, 15, 0]

입출력 예 설명

입출력 예 #1

첫 번째 사진 속 "may", "kein", "kain", "radi"의 그리움 점수를 합치면 19(5 + 10 + 1 + 3)점 입니다. 두 번째 사진 속 그리워하는 사람들인 "may"와 "kein"의 그리움 점수를 합치면 15(5 + 10)점입니다. 세 번째 사진의 경우 "kain"과 "may"만 그리워하므로 둘의 그리움 점수를 합한 6(1 + 5)점이 사진의 추억 점수입니다. 따라서 [19, 15, 6]을 반환합니다.

입출력 예 #2

첫 번째 사진 속 그리워하는 사람들인 "kali", "mari", "don"의 그리움 점수를 합치면 67(11 + 1 + 55)점입니다. 두 번째 사진 속엔 그리워하는 인물이 없으므로 0점입니다. 세 번째 사진 속 그리워하는 사람은 "don"만 있으므로 55점입니다. 따라서 [67, 0, 55]를 반환합니다.

 

 

package LV1;

import java.util.HashMap;
import java.util.Map;

public class H176963 {
	public int[] solution(String[] name, int[] yearning, String[][] photo) {
		// 사람 이름에 대응하는 그리움 점수를 저장하는 맵을 생성합니다.
		Map<String, Integer> nameToYearning = new HashMap<>();
		for (int i = 0; i < name.length; i++) {
			nameToYearning.put(name[i], yearning[i]);
		}

		// 각 사진의 추억 점수를 계산합니다.
		int[] answer = new int[photo.length];
		for (int i = 0; i < photo.length; i++) {
			int score = 0;
			for (String person : photo[i]) {
				// 해당 사람의 그리움 점수를 추억 점수에 더합니다.
				score += nameToYearning.getOrDefault(person, 0);
			}
			answer[i] = score;
		}

		return answer;
	}
}
728x90
반응형
LIST

'알고리즘 > 프로그래머스 JAVA LV.1' 카테고리의 다른 글

공원 산책  (0) 2023.05.16
명예의 전당 (1)  (0) 2023.05.15
[1차] 다트 게임  (1) 2023.05.15
푸드 파이트 대회  (0) 2023.05.15
달리기 경주  (0) 2023.05.15
728x90
반응형
SMALL

문제 설명

다트 게임

카카오톡에 뜬 네 번째 별! 심심할 땐? 카카오톡 게임별~

카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다.

갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다.

  1. 다트 게임은 총 3번의 기회로 구성된다.
  2. 각 기회마다 얻을 수 있는 점수는 0점에서 10점까지이다.
  3. 점수와 함께 Single(S), Double(D), Triple(T) 영역이 존재하고 각 영역 당첨 시 점수에서 1제곱, 2제곱, 3제곱 (점수 , 점수 , 점수 )으로 계산된다.2
  4. 3
  5. 1
  6. 옵션으로 스타상() , 아차상(`#`)이 존재하며 스타상() 당첨 시 해당 점수와 바로 전에 얻은 점수를 각 2배로 만든다. 아차상(#) 당첨 시 해당 점수는 마이너스된다.
  7. 스타상()은 첫 번째 기회에서도 나올 수 있다. 이 경우 첫 번째 스타상()의 점수만 2배가 된다. (예제 4번 참고)
  8. 스타상()의 효과는 다른 스타상()의 효과와 중첩될 수 있다. 이 경우 중첩된 스타상(``) 점수는 4배가 된다. (예제 4번 참고)
  9. 스타상(``)의 효과는 아차상(#)의 효과와 중첩될 수 있다. 이 경우 중첩된 아차상(#)의 점수는 -2배가 된다. (예제 5번 참고)
  10. Single(S), Double(D), Triple(T)은 점수마다 하나씩 존재한다.
  11. 스타상(``), 아차상(#)은 점수마다 둘 중 하나만 존재할 수 있으며, 존재하지 않을 수도 있다.

0~10의 정수와 문자 S, D, T, *, #로 구성된 문자열이 입력될 시 총점수를 반환하는 함수를 작성하라.

입력 형식

"점수|보너스|[옵션]"으로 이루어진 문자열 3세트.

예) 1S2D*3T

  • 점수는 0에서 10 사이의 정수이다.
  • 보너스는 S, D, T 중 하나이다.
  • 옵선은 *이나 # 중 하나이며, 없을 수도 있다.

출력 형식

3번의 기회에서 얻은 점수 합계에 해당하는 정수값을 출력한다.

예) 37

입출력 예제

예제 dartResult answer 설명

1 1S2D*3T 37 11 * 2 + 22 * 2 + 33
2 1D2S#10S 9 12 + 21 * (-1) + 101
3 1D2S0T 3 12 + 21 + 03
4 1S2T3S 23 11 * 2 * 2 + 23 * 2 + 31
5 1D#2S*3S 5 12 * (-1) * 2 + 21 * 2 + 31
6 1T2D3D# -4 13 + 22 + 32 * (-1)
7 1D2S3T* 59 12 + 21 * 2 + 33 * 2
package LV1;

public class H17682 {
	public int solution(String dartResult) {
		// 각 기회에서 얻은 점수를 저장할 배열 선언합니다.
		int[] score = new int[3];
		int idx = 0; // 현재 점수를 가리키는 인덱스입니다.

		for (int i = 0; i < dartResult.length(); i++) {
			char c = dartResult.charAt(i); // 현재 문자를 가져옵니다.

			if (Character.isDigit(c)) { // 현재 문자가 숫자인 경우
				if(c == '1' && dartResult.charAt(i+1) == '0') {  // 10점인 경우
					score[idx] = 10;
					i++;  // '0'을 건너뜁니다.
				} else {
					score[idx] = c - '0';  // 현재 점수를 저장합니다.
				}
			} else if(c == 'S' || c == 'D' || c == 'T') {  // 보너스인 경우
				if(c == 'D') {
					score[idx] = (int) Math.pow(score[idx], 2);  // 2제곱합니다.
				} else if(c == 'T') {
					score[idx] = (int) Math.pow(score[idx], 3);  // 3제곱합니다.
				}
				idx++;  // 다음 점수를 가리키도록 인덱스를 증가시킵니다.
			} else if(c == '*' || c == '#') {  // 옵션인 경우
				if(c == '*') {
					if(idx > 1) score[idx-2] *= 2;  // 바로 전 점수를 2배합니다.
					score[idx-1] *= 2;  // 현재 점수를 2배합니다.
				} else if(c == '#') {
					score[idx-1] *= -1;  // 현재 점수를 마이너스로 만듭니다.
				}
			}
		}

		// 최종 점수를 계산합니다.
		int answer = 0;
		for(int i = 0; i < 3; i++) {
			answer += score[i];
		}

		return answer;
	}
}
728x90
반응형
LIST

'알고리즘 > 프로그래머스 JAVA LV.1' 카테고리의 다른 글

명예의 전당 (1)  (0) 2023.05.15
추억 점수  (0) 2023.05.15
푸드 파이트 대회  (0) 2023.05.15
달리기 경주  (0) 2023.05.15
콜라 문제  (0) 2023.05.13
728x90
반응형
SMALL

문제 설명

수웅이는 매달 주어진 음식을 빨리 먹는 푸드 파이트 대회를 개최합니다. 이 대회에서 선수들은 1대 1로 대결하며, 매 대결마다 음식의 종류와 양이 바뀝니다. 대결은 준비된 음식들을 일렬로 배치한 뒤, 한 선수는 제일 왼쪽에 있는 음식부터 오른쪽으로, 다른 선수는 제일 오른쪽에 있는 음식부터 왼쪽으로 순서대로 먹는 방식으로 진행됩니다. 중앙에는 물을 배치하고, 물을 먼저 먹는 선수가 승리하게 됩니다.

이때, 대회의 공정성을 위해 두 선수가 먹는 음식의 종류와 양이 같아야 하며, 음식을 먹는 순서도 같아야 합니다. 또한, 이번 대회부터는 칼로리가 낮은 음식을 먼저 먹을 수 있게 배치하여 선수들이 음식을 더 잘 먹을 수 있게 하려고 합니다. 이번 대회를 위해 수웅이는 음식을 주문했는데, 대회의 조건을 고려하지 않고 음식을 주문하여 몇 개의 음식은 대회에 사용하지 못하게 되었습니다.

예를 들어, 3가지의 음식이 준비되어 있으며, 칼로리가 적은 순서대로 1번 음식을 3개, 2번 음식을 4개, 3번 음식을 6개 준비했으며, 물을 편의상 0번 음식이라고 칭한다면, 두 선수는 1번 음식 1개, 2번 음식 2개, 3번 음식 3개씩을 먹게 되므로 음식의 배치는 "1223330333221"이 됩니다. 따라서 1번 음식 1개는 대회에 사용하지 못합니다.

수웅이가 준비한 음식의 양을 칼로리가 적은 순서대로 나타내는 정수 배열 food가 주어졌을 때, 대회를 위한 음식의 배치를 나타내는 문자열을 return 하는 solution 함수를 완성해주세요.


제한사항

  • 2 ≤ food의 길이 ≤ 9
  • 1 ≤ food의 각 원소 ≤ 1,000
  • food에는 칼로리가 적은 순서대로 음식의 양이 담겨 있습니다.
  • food[i]는 i번 음식의 수입니다.
  • food[0]은 수웅이가 준비한 물의 양이며, 항상 1입니다.
  • 정답의 길이가 3 이상인 경우만 입력으로 주어집니다.

입출력 예

food result

[1, 3, 4, 6] "1223330333221"
[1, 7, 1, 2] "111303111"

입출력 예 설명

입출력 예 #1

  • 문제 예시와 같습니다.

입출력 예 #1

  • 두 선수는 1번 음식 3개, 3번 음식 1개를 먹게 되므로 음식의 배치는 "111303111"입니다.
package LV1;
/*
수웅이는 매달 주어진 음식을 빨리 먹는 푸드 파이트 대회를 개최합니다.
이 대회에서 선수들은 1대 1로 대결하며, 매 대결마다 음식의 종류와 양이 바뀝니다.
대결은 준비된 음식들을 일렬로 배치한 뒤, 한 선수는 제일 왼쪽에 있는 음식부터 오른쪽으로,
다른 선수는 제일 오른쪽에 있는 음식부터 왼쪽으로 순서대로 먹는 방식으로 진행됩니다.
중앙에는 물을 배치하고, 물을 먼저 먹는 선수가 승리하게 됩니다.

이때, 대회의 공정성을 위해 두 선수가 먹는 음식의 종류와 양이 같아야 하며, 음식을 먹는 순서도 같아야 합니다.
또한, 이번 대회부터는 칼로리가 낮은 음식을 먼저 먹을 수 있게 배치하여 선수들이 음식을 더 잘 먹을 수 있게 하려고 합니다.
이번 대회를 위해 수웅이는 음식을 주문했는데, 대회의 조건을 고려하지 않고 음식을 주문하여 몇 개의 음식은 대회에 사용하지 못하게 되었습니다.

예를 들어, 3가지의 음식이 준비되어 있으며, 칼로리가 적은 순서대로 1번 음식을 3개, 2번 음식을 4개, 3번 음식을 6개 준비했으며,
물을 편의상 0번 음식이라고 칭한다면,
두 선수는 1번 음식 1개, 2번 음식 2개, 3번 음식 3개씩을 먹게 되므로 음식의 배치는 "1223330333221"이 됩니다.
따라서 1번 음식 1개는 대회에 사용하지 못합니다.

수웅이가 준비한 음식의 양을 칼로리가 적은 순서대로 나타내는 정수 배열 food가 주어졌을 때,
대회를 위한 음식의 배치를 나타내는 문자열을 return 하는 solution 함수를 완성해주세요.
 */
public class H134240 {
	public String solution(int[] food) {
		// 음식을 배치한 문자열을 만들기 위해 StringBuilder를 사용합니다.
		StringBuilder sb =new StringBuilder();
		
		// 1번 음식부터 마지막 음식까지 순회합니다.
		for (int i = 1; i < food.length; i++) {
			// 각 음식을 반으로 나누어 두 선수가 먹을 수 있는 음식의 양을 구합니다.
			int half = food[i] / 2;

			// 두 선수가 먹을 수 있는 음식의 양만큼 해당 음식 번호를 문자열에 추가합니다.
			for (int j = 0; j < half; j++) {
				sb.append(i);
			}
		}
		// 현재까지 만들어진 문자열을 temp에 저장합니다.
		String temp = sb.toString();
		// 두 선수가 만나는 지점인 물을 추가합니다. 물은 0번 음식입니다.
		sb.append(0);

		// 앞서 만든 temp 문자열을 뒤집어서 추가합니다.
		// 이렇게 하면 두 선수가 같은 양과 종류의 음식을 순서대로 먹게 됩니다.
		sb.append(new StringBuilder(temp).reverse());
		
		// 최종적으로 만들어진 문자열을 반환합니다.
		return sb.toString();
	}
}
728x90
반응형
LIST

'알고리즘 > 프로그래머스 JAVA LV.1' 카테고리의 다른 글

추억 점수  (0) 2023.05.15
[1차] 다트 게임  (1) 2023.05.15
달리기 경주  (0) 2023.05.15
콜라 문제  (0) 2023.05.13
가장 가까운 같은 글자  (0) 2023.05.13

+ Recent posts