반응형

문제

준원이는 저번 주에 살면서 처음으로 코스트코를 가 봤다. 정말 멋졌다. 그런데, 몇 개 담지도 않았는데 수상하게 높은 금액이 나오는 것이다! 준원이는 영수증을 보면서 정확하게 계산된 것이 맞는지 확인해보려 한다.

영수증에 적힌,

  • 구매한 각 물건의 가격과 개수
  • 구매한 물건들의 총 금액

을 보고, 구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하는지 검사해보자.


입력

첫째 줄에는 영수증에 적힌 총 금액 X가 주어진다.

둘째 줄에는 영수증에 적힌 구매한 물건의 종류의 수 N이 주어진다.

이후 N개의 줄에는 각 물건의 가격 a와 개수 b가 공백을 사이에 두고 주어진다.


출력

구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하면 Yes를 출력한다. 일치하지 않는다면 No를 출력한다.


제한

  •  1≤X≤1000000000
  •  1≤N≤100
  •  1≤a≤1000000
  •  1≤b≤10

예제 입력

예제입력 예제출력
260000
4
20000 5
30000 2
10000 6
5000 8
Yes
250000
4
20000 5
30000 2
10000 6
5000 8
No

풀이 및 코드

-> 간단한 문제라고 생각했는데도 틀렸다고 나와서 당황했다. 알고보니 Yes, No로 출력하지않고 yes, no라고 출력해서 틀린 것이었다. 주어진 조건을 놓치지 않는 연습이 더 필요해 보인다.

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int totalPrice = Integer.parseInt(sc.nextLine()); // 총 금액
        int totalCount = Integer.parseInt(sc.nextLine()); // 총 구매종류 갯수
        
        int[] price = new int[totalCount]; // 가격 담을 변수
        int[] count = new int[totalCount]; // 갯수 담을 변수
        String judge = "No"; // 금액이 맞는지 아닌지 판단
        int sumPrice = 0;
        
        // 물건 가격과 갯수 담기
        for(int i=0;i<totalCount;i++){
            String totalTemp = sc.nextLine();
            String[] temp = totalTemp.split(" ");
            price[i] = Integer.parseInt(temp[0]);
            count[i] = Integer.parseInt(temp[1]);
            sumPrice += price[i]*count[i];
        }
        
        if(sumPrice==totalPrice){
            judge = "Yes";
        }
        
        System.out.println(judge);
        
    }
}

 

변수를 줄이고, 간결하게 리팩토링한 코드는 아래와 같다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int totalPrice = sc.nextInt(); // 총 금액
        int totalCount = sc.nextInt(); // 총 구매종류 갯수
        sc.nextLine(); // 개행문자 처리
        
        int sumPrice = 0;
        
        // 물건 가격과 갯수 계산
        for (int i = 0; i < totalCount; i++) {
            int itemPrice = sc.nextInt();
            int itemCount = sc.nextInt();
            sumPrice += itemPrice * itemCount;
        }
        
        System.out.println(sumPrice == totalPrice ? "Yes" : "No");
    }
}
반응형
반응형

문제

 

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.

  1. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
  2. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
  3. 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.

예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다.

3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.


입력

 

첫째 줄에 3개의 눈이 빈칸을 사이에 두고 각각 주어진다.


출력

 

첫째 줄에 게임의 상금을 출력 한다.


예제

 

예제입력 예제출력
3 3 6 1300
2 2 2 12000
6 2 5 600

풀이 및 코드

 

-> 나는 if문으로 모든 경우를 다 따져서 풀었다.(3개가 같은 경우, 2개만 같은 경우, 모두 다른 경우) 그 코드는 아래와 같다.

import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);

        int a = in.nextInt();
        int b = in.nextInt();
        int c = in.nextInt();
        
        if(a==b&&b==c){
            System.out.println(10000+a*1000);
        } else if((a==b&&b!=c)||(b==c&&c!=a)||(c==a&&a!=b)){
            if(a==b){
                System.out.println(1000+a*100);
            } else if(b==c){
                System.out.println(1000+b*100);
            } else if(c==a){
                System.out.println(1000+c*100);
            }
        } else if(a!=b&&b!=c) {
            if(a>b&&a>c){
                System.out.println(100*a);
            } else if(b>a&&b>c){
                System.out.println(100*b);
            } else if(c>a&&c>b){
                System.out.println(100*c);
            }
        }
        
    }
}

 

하지만 이는 너무 비효율적이어 보인다. 그래서 어떻게 하면 효율적으로 풀 수 있을지 찾아보았다.

Array 함수를 통해서 주사위 값을 미리 정렬한 후에 비교를 하면 크기에 따른 순서가 정해지기 때문에 훨씬 간단하게 코드를 작성할 수 있었다. 그 코드는 아래와 같다.

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int[] dice = new int[3];
        for (int i = 0; i < 3; i++) {
            dice[i] = in.nextInt();
        }
        Arrays.sort(dice); // 정렬하여 최대 값을 찾기 쉽게 함
        if (dice[0] == dice[2]) { // 모든 주사위 눈이 같은 경우
            System.out.println(10000 + dice[0] * 1000);
        } else if (dice[0] == dice[1] || dice[1] == dice[2]) { // 두 개의 주사위 눈이 같은 경우
            System.out.println(1000 + dice[1] * 100);
        } else { // 모든 주사위 눈이 다른 경우
            System.out.println(dice[2] * 100); // 정렬된 배열의 마지막 요소가 최대 값
        }
    }
}
반응형
반응형

문제 설명

코니는 매일 다른 옷을 조합하여 입는것을 좋아합니다.

예를 들어 코니가 가진 옷이 아래와 같고, 오늘 코니가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야합니다.

종류 이름
얼굴 동그란 안경, 검정 선글라스
상의 파란색 티셔츠
하의 청바지
겉옷 긴 코트
  • 코니는 각 종류별로 최대 1가지 의상만 착용할 수 있습니다. 예를 들어 위 예시의 경우 동그란 안경과 검정 선글라스를 동시에 착용할 수는 없습니다.
  • 착용한 의상의 일부가 겹치더라도, 다른 의상이 겹치지 않거나, 혹은 의상을 추가로 더 착용한 경우에는 서로 다른 방법으로 옷을 착용한 것으로 계산합니다.
  • 코니는 하루에 최소 한 개의 의상은 입습니다.

코니가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.


제한사항

  • clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다.
  • 코니가 가진 의상의 수는 1개 이상 30개 이하입니다.
  • 같은 이름을 가진 의상은 존재하지 않습니다.
  • clothes의 모든 원소는 문자열로 이루어져 있습니다.
  • 모든 문자열의 길이는 1 이상 20 이하인 자연수이고 알파벳 소문자 또는 '_' 로만 이루어져 있습니다.

입출력 예

clothes return
[["yellow_hat", headgear], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]] 5
[["crow_mask", "face"],["blue_sunglasses", "face"],["smoky_makeup","face"]] 3

입출력 예 설명

 

예제 #1
headgear에 해당하는 의상이 yellow_hat, green_turban이고 eyewear에 해당하는 의상이 blue_sunglasses이므로 아래와 같이 5개의 조합이 가능합니다.

 

1. yellow_hat
2. blue_sunglasses
3. green_turban
4. yellow_hat + blue_sunglasses
5. green_turban + blue_sunglasses

 

 

예제 #2
face에 해당하는 의상이 crow_mask, blue_sunglasses, smoky_makeup이므로 아래와 같이 3개의 조합이 가능합니다.

crow_mask
2. blue_sunglasses
3. smoky_makeup

풀이

 

-> 먼저 hashMap에 각 의상의 종류를 담는다. 그리고 value값으로 숫자를 담는다. 같은 의상 종류가 들어오면 value값을 +1 해준다. 그렇게 담은 map을 가지고, 종류별로 갯수의 + 1 한것을 모두 곱하고 마지막에 -1 해주면 answer가 된다.


코드

import java.util.*;

class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;

        HashMap<String, Integer> map = new HashMap<>();
        for(String[] type : clothes){
            if(map.containsKey(type[1])){
                map.put(type[1], map.get(type[1])+1);
            } else {
                map.put(type[1], 1);
            }
        }
        
        for(String type:map.keySet()){
            answer *= (map.get(type)+1); 
        }
        
        
        return answer-1;
    }
}
반응형
반응형

문제 설명

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.
전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.

  • 구조대 : 119
  • 박준영 : 97 674 223
  • 지영석 : 11 9552 4421

전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.


제한 사항
  • phone_book의 길이는 1 이상 1,000,000 이하입니다.
    • 각 전화번호의 길이는 1 이상 20 이하입니다.
    • 같은 전화번호가 중복해서 들어있지 않습니다.

입출력 예제

 

phone_book return
["119", "97674223", "1195524421"] false
["123","456","789"] true
["12","123","1235","567","88"] false

입출력 예 설명

 

입출력 예 #1
앞에서 설명한 예와 같습니다.

 

입출력 예 #2
한 번호가 다른 번호의 접두사인 경우가 없으므로, 답은 true입니다.

 

입출력 예 #3
첫 번째 전화번호, “12”가 두 번째 전화번호 “123”의 접두사입니다. 따라서 답은 false입니다.


풀이

-> 해시를 이용해서 풀려고 했더니 어떻게 할지 처음에는 감이 잡히지 않았다. 그래서 일단 HashMap을 생성하여 phone_book의 숫자들을 key값으로 담았다. value는 모두 true로 두었다. 그 다음, 다시 반복문을 통해서 phone_book의 숫자들을 하나씩 빼서, 각 숫자들을 한 자리씩 prefix에 더하면서 접두어를 만든다. 이 접두어가 HashMap에 존재하는지 확인하면서 phone_number의 숫자와 같지 않다면 phone_number 배열 안에 한 숫자의 접두어가 존재하는 것이므로 false를 return 하고, 나머지 경우에는 true를 return한다.


코드

import java.util.HashMap;

class Solution {
    public boolean solution(String[] phone_book) {
        // 해시 맵을 생성하여 전화번호부를 저장
        HashMap<String, Boolean> phoneBookMap = new HashMap<>();
        for (String phoneNumber : phone_book) {
            phoneBookMap.put(phoneNumber, true);
        }
        
        // 각 전화번호의 접두어를 확인하여 다른 전화번호의 접두어인지 검사
        for (String phoneNumber : phone_book) {
            String prefix = "";
            for (char digit : phoneNumber.toCharArray()) {
                prefix += digit;
                // 접두어가 해시 맵에 존재하고 현재 번호가 접두어가 아닌 경우
                if (phoneBookMap.containsKey(prefix) && !prefix.equals(phoneNumber)) {
                    return false; // 접두어가 발견되었으므로 false 반환
                }
            }
        }
        
        // 모든 번호를 검사한 후에도 접두어가 발견되지 않았으면 true 반환
        return true;
    }
}
반응형
반응형

문제 설명

양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.


제한사항

  • 1 ≤ n ≤ 30

입출력 예

 

n result
4 [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]
5 [[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]]

 


입출력 예 설명

 

입출력 예 #1

  • 예제 1번의 n의 값은 4로 4 × 4 배열에 다음과 같이 1부터 16까지 숫자를 채울 수 있습니다.
행\열 0 1 2 3
0 1 2 3 4
1 12 13 14 5
2 11 16 15 6
3 10 9 8 7

 

입출력 예 #2

  • 예제 2번의 n의 값은 5로 5 × 5 배열에 다음과 같이 1부터 25까지 숫자를 채울 수 있습니다.
행\열 0 1 2 3 4
0 1 2 3 4 5
1 16 17 18 19 6
2 15 24 25 20 7
3 14 23 22 21 8
4 13 12 11 10 9

 

따라서 [[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]]를 return 합니다.


풀이

-> answer 배열을 n x n 사이즈로 초기화해준다. num 변수를 1로 생성한다. 행과 열의 시작과 끝 변수를 생성해준다. while문을 통해서 num이 n x n과 같아질 때까지 반복한다. "왼쪽에서 오른쪽으로 끝까지 간 후 위에서 아래로 끝까지 채우고, 다시 오른쪽에서 왼쪽으로 끝까지 채우고, 아래에서 위로 끝까지 채운다."를 반복한다. 이 때, for문이 종료될 때 마다, rowStart, rowEnd, colStart, colEnd를 적절하게 변화시켜줘야한다. 예를 들어 처음 오른쪽 끝까지 채운 후 아래로 가야할 때는 rowStart를 증가시켜 아래행부터 시작한다. 이렇게 반복문이 완료된 후 배열 answer를 return하면 결과이다.


코드

class Solution {
    public int[][] solution(int n) {
        int[][] answer = new int[n][n];
        int num = 1; // 배열에 넣을 숫자를 초기화

        int rowStart = 0, rowEnd = n - 1; // 행 시작과 끝 인덱스 초기화
        int colStart = 0, colEnd = n - 1; // 열 시작과 끝 인덱스 초기화

        while (num <= n * n) {
            // 왼쪽에서 오른쪽으로 숫자 채우기
            for (int i = colStart; i <= colEnd; i++) {
                answer[rowStart][i] = num++;
            }
            rowStart++; // 위쪽 행을 다 채웠으므로 행 시작 인덱스 증가

            // 위에서 아래로 숫자 채우기
            for (int i = rowStart; i <= rowEnd; i++) {
                answer[i][colEnd] = num++;
            }
            colEnd--; // 오른쪽 열을 다 채웠으므로 열 끝 인덱스 감소

            // 오른쪽에서 왼쪽으로 숫자 채우기
            for (int i = colEnd; i >= colStart; i--) {
                answer[rowEnd][i] = num++;
            }
            rowEnd--; // 아래쪽 행을 다 채웠으므로 행 끝 인덱스 감소

            // 아래에서 위로 숫자 채우기
            for (int i = rowEnd; i >= rowStart; i--) {
                answer[i][colStart] = num++;
            }
            colStart++; // 왼쪽 열을 다 채웠으므로 열 시작 인덱스 증가
        }

        return answer;
    }
}
반응형
반응형

문제 설명

문자열들이 담긴 리스트가 주어졌을 때, 모든 문자열들을 순서대로 합친 문자열을 꼬리 문자열이라고 합니다. 꼬리 문자열을 만들 때 특정 문자열을 포함한 문자열은 제외시키려고 합니다. 예를 들어 문자열 리스트 ["abc", "def", "ghi"]가 있고 문자열 "ef"를 포함한 문자열은 제외하고 꼬리 문자열을 만들면 "abcghi"가 됩니다.

문자열 리스트 str_list와 제외하려는 문자열 ex가 주어질 때, str_list에서 ex를 포함한 문자열을 제외하고 만든 꼬리 문자열을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 2 ≤ str_list의 길이 ≤ 10
  • 1 ≤ str_list의 원소의 길이 ≤ 10
  • 1 ≤ ex의 길이 ≤ 5

str_list ex result
["abc","def","ghi"] "ef" "abcdghi"
["abc","bbc","cbc"] "c" ""

 

입출력 예 설명

 

입출력 예 #1

  • 본문과 동일합니다.

입출력 예 #2

  • 리스트 안의 모든 문자열이 "c"를 포함하므로 빈 문자열을 return합니다.

풀이

 

-> ArrayList를 선언한 후 반복문을 통해서 str_list에 ex값을 포함하고 있는지 contains 함수를 통해 확인한 후 포함하고 있으면 제외하고, 포함하고 있지 않으면 ArrayList에 담는다. 그 후, StringBuilder로 result를 선언하고, 반복문을 통해 ArrayList에 담았던 값들을 result에 append해서 return 해준다.

 


코드

 

import java.util.ArrayList;
import java.util.List;

class Solution {
    public String solution(String[] str_list, String ex) {
        List<String> filteredList = new ArrayList<>();

        for (String str : str_list) {
            if (!str.contains(ex)) {
                filteredList.add(str);
            }
        }

        StringBuilder result = new StringBuilder();
        for (String str : filteredList) {
            result.append(str);
        }

        return result.toString();
    }
}

 

반응형
반응형

문제 설명

0번부터 n - 1번까지 n명의 학생 중 3명을 선발하는 전국 대회 선발 고사를 보았습니다. 등수가 높은 3명을 선발해야 하지만, 개인 사정으로 전국 대회에 참여하지 못하는 학생들이 있어 참여가 가능한 학생 중 등수가 높은 3명을 선발하기로 했습니다.

각 학생들의 선발 고사 등수를 담은 정수 배열 rank와 전국 대회 참여 가능 여부가 담긴 boolean 배열 attendance가 매개변수로 주어집니다. 전국 대회에 선발된 학생 번호들을 등수가 높은 순서대로 각각 a, b, c번이라고 할 때 10000 × a + 100 × b + c를 return 하는 solution 함수를 작성해 주세요.

 


제한사항

 

  • 3 ≤ rank의 길이 = attendance의 길이 ≤ 100
  • rank[i]는 i번 학생의 선발 고사 등수를 의미합니다.
  • rank의 원소는 1부터 n까지의 정수로 모두 서로 다릅니다.
  • attendance[i]는 i번 학생의 전국 대회 참석 가능 여부를 나타냅니다.
    • attendance[i]가 true라면 참석 가능, false면 참석 불가능을 의미합니다.
  • attendance의 원소 중 적어도 3개는 true입니다.

입출력 예

 

rank attendance result
[3,7,2,5,4,6,1] [false,true,true,true,true,false,false] 20403
[1,2,3] [true,true,true] 102
[6,1,5,2,3,4] [true,false,true,false,false,true] 50200

입출력 예 설명

 

입출력 예 #1

  • 예제 1번에서 1등은 6번 학생이지만 전국 대회에 참석 불가능하므로 넘어갑니다. 2등은 2번 학생이고 전국 대회에 참석 가능하므로 1순위로 선발됩니다. 3등은 0번 학생이고 전국 대회에 참석 불가능 하므로 넘어갑니다. 4등과 5등은 각각 4번, 3번 학생이고 두 학생 모두 전국 대회에 참석 가능하므로 각각 2순위, 3순위로 선발됩니다. 3명을 선발하였으므로 6등과 7등은 확인하지 않아도 됩니다. 따라서 10000 × 2 + 100 × 4 + 3 = 20403을 return 합니다.

입출력 예 #2

  • 예제 2번에서 1, 2, 3등은 각각 0번, 1번, 2번 학생이고 세 학생 모두 전국 대회에 참석 가능하므로 각각 1순위, 2순위, 3순위로 선발됩니다. 따라서 10000 × 0 + 100 × 1 + 2 = 102를 return 합니다.

입출력 예 #3

  • 예제 3번에서 1, 2, 3등은 각각 1번, 3번, 4번 학생이지만 세 학생 모두 전국 대회에 참석 불가능합니다. 다음으로 4, 5, 6등은 각각 5번, 2번, 0번 학생이고 세 학생 모두 전국 대회에 참석 가능하므로 각각 1순위, 2순위, 3순위로 선발됩니다. 따라서 10000 × 5 + 100 × 2 + 0 = 50200을 return 합니다.

풀이

 

1. ArrayList를 이용해서 temp배열에 true값을 가진 rank값들만 담는다.

2. temp2라는 정수배열을 선언해서 temp배열에 담은 값들을 옮긴 후에 오름차순으로 sort한다.

3. temp2의 index 0,1,2에 해당하는 값과 같은 값을 가지는 rank배열의 값의 index를 미리 선언해둔 a 배열에 담는다.

4. a배열의 3개 값으로 result값을 계산한다.


코드

 

import java.util.*;
class Solution {
    public int solution(int[] rank, boolean[] attendance) {
        int answer = 0;
        int[] a={0,0,0};
        int b=0;
        int c=0;
        ArrayList<Integer> temp = new ArrayList<>();
        for(int i=0;i<rank.length;i++){
            if(attendance[i]==true){
                temp.add(rank[i]);
            }
        }
        int[] temp2 = new int[temp.size()];
        for(int i=0;i<temp.size();i++){
            temp2[i]=temp.get(i);
        }
        Arrays.sort(temp2);
        for(int i=0;i<rank.length;i++){
            for(int j=0;j<3;j++){
                if(temp2[j]==rank[i]){
                    a[j]=i;
                }
            }
        }
        answer = a[0]*10000+a[1]*100+a[2];
        return answer;
    }
}
반응형
반응형

문제 설명

 

문자열 배열 strArr이 주어집니다. strArr의 원소들을 길이가 같은 문자열들끼리 그룹으로 묶었을 때 가장 개수가 많은 그룹의 크기를 return 하는 solution 함수를 완성해 주세요.


제한사항

 

1 ≤ strArr의 길이 ≤ 100,000

  • 1 ≤ strArr의 원소의 길이 ≤ 30
  • strArr의 원소들은 알파벳 소문자로 이루어진 문자열입니다.

입출력 예

 

strArr result
["a","bc","d","efg","hi"] 2

 


입출력 예 설명

 

입출력 예 #1

각 문자열들을 길이에 맞게 그룹으로 묶으면 다음과 같습니다.

 

문자열 길이 문자열 목록 개수
1 ["a","d"] 2
2 ["bc","hi"] 2
3 ["efg"] 1

풀이

 

1. 배열을 동적으로 담기 위해 temp라는 배열을 ArrayList로 선언한다. temp 배열에 strArr의 각 원소들의 길이값을 중복없이 담는다.

2. int[] 구조로 temp2 배열을 temp.size()크기로 선언해준다. 이는 strArr의 각 원소들의 길이 값을 가지는 원소가 몇개 있는지 담기 위함이다. 그리고 반복문을 통해서 길이값-1에 해당하는 인덱스의 temp2값을 +1 해준다.

3. temp2의 개수만큼 반복문을 돌리면서 가장 큰값을 answer값에 담는다.


코드

 

import java.util.*;
class Solution {
    public int solution(String[] strArr) {
        int answer = 0;
        ArrayList<Integer> temp = new ArrayList<>();
        for(int i=0;i<strArr.length;i++){
            if(!temp.contains(strArr[i].length())){
                temp.add(strArr[i].length());
            }
        }
        
        int[] temp2 = new int[temp.size()];
        for(int i=0;i<strArr.length;i++){
            temp2[strArr[i].length()-1]++;
        }
        
        for(int i=0;i<temp2.length;i++){
            if(answer<temp2[i]){
                answer = temp2[i];
            }
        }
        return answer;
    }
}
반응형

+ Recent posts