본문 바로가기
Algorithm Study/Programmers

[프로그래머스] 과일 장수 / 영어 끝말잇기 (Java)

by HanaV 2023. 7. 10.
728x90

1. 과일 장수

https://school.programmers.co.kr/learn/courses/30/lessons/135808

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.*;

class Solution {
    public int solution(int k, int m, int[] score) {
        int answer = 0;

        Arrays.sort(score);
        
        for (int i=score.length-1; i>=0; i-=m) {
            if (i>=m-1) answer += score[i- m + 1]  * m;
            else break; 
        } 
        return answer;
    }
}

 

원래는 아래처럼 배열을 내림차순 정렬을 하려고 했으나,

Arrays.sort(arr, Collections.reverseOrder());

[Error] no suitable method found for sort(int[],java.util.Comparator<java.lang.Object>) 에러가 떴다.

원인을 찾아보니 Comparator는 원시 타입인 int 배열에서는 사용할 수 없고, 객체 배열에서는 사용이 가능하기 때문에 Integer[]로 바꿔줘야 사용이 가능하다고 한다.
그래서 그냥 오름차순으로 정렬을 하고, 뒤에서부터 인덱스를 확인해가는 소스를 짰다.

 

2. 영어 끝말잇기

https://school.programmers.co.kr/learn/courses/30/lessons/12981

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.*;

class Solution {
    public int[] solution(int n, String[] words) {
        int[] answer = new int[2];

        /*문제 이해
        같은 단어가 있는지 확인!!
        words 배열 앞에서부터 string의 맨 뒷 글자와 그 다음 앞 글자를 비교해가야함
        그리고 다르다면 거기서 break하고, 그 원소의 index+1를 n으로 나눠서
        몫+1은 answer[1]에, 나머지는 answer[0] (나머지가 0이면 n으로 넣기)
        */
        List<String> wordCheck = new ArrayList<>(); wordCheck.add(words[0]);

        int wrong = -1; //wrong은 몇 번째에 틀렸는지
        for (int i=1; i<words.length; i++){
            if (wordCheck.contains(words[i])){
                wrong = i+1; break; //중복
            } else wordCheck.add(words[i]);
            if (words[i].charAt(0) != words[i-1].charAt(words[i-1].length()-1)){
                wrong = i+1; break; //틀림
            }
        }
        //System.out.println(wrong);
        if (wrong == -1) return answer; //-1이면 틀린 부분이 없음
        if (wrong%n == 0) answer[0] = n;
        else answer[0] = wrong%n;
        answer[1] = (wrong-1)/n + 1;
        
        return answer;
    }
}

 

728x90

"); wcs_do();