알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

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

 

프로그래머스

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

programmers.co.kr


Think🤔

HashMap을 이용해서 key 값과 같으면 그 value 값 삽입


Solution✍
import java.util.HashMap;

class Solution {
    public int[] solution(String[] name, int[] yearning, String[][] photo) {
        HashMap<String, Integer> hm = new HashMap();
        int[] answer = new int[photo.length];
        int sum = 0;
        
        for(int i=0; i<name.length; i++){
            hm.put(name[i],yearning[i]);
        }
        
        for(int i=0; i<photo.length; i++){
            for(int j=0; j<photo[i].length; j++){
                String key = photo[i][j];
                if(hm.containsKey(key)){
                    answer[i] += hm.get(key);
                }
            }
        }
        
        
        return answer;
    }
}

// HASH MAP 사용 
// 1. HashMap key에 name[0] value에 yearning[0]
// int sum = 0; 이용 
// for문 photo 돌림

Review🤩

다른 사람들 풀이를 보니 , IntStream으로 푸신분이 많았다.

 

IntStream은 Java 8에서 추가된 클래스

정수요소를 처리할때 특화되어 있음 

병렬처리를 지원해서 효율성에 좋음

 

import java.util.List;
import java.util.stream.IntStream;

public class IntStreamExample {
    public static void main(String[] args) {
        List<Integer> numbers = List.of(1, 2, 3, 4, 5);
        int sum = numbers.stream().mapToInt(Integer::intValue).sum();
        System.out.println("Sum: " + sum);
    }
}

stream 패키지를 사용하며 , 문법은 이와 같다.

 

스트림 생성 방법

List<String> list = Arrays.asList("apple", "banana", "cherry");
Stream<String> stream = list.stream();

String[] array = {"apple", "banana", "cherry"};
Stream<String> stream = Arrays.stream(array);

Stream<String> stream = Stream.of("apple", "banana", "cherry");

list , 배열 , 스트림메서드를 이용해서 스트림 생성할 수 있다.

 

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamExample {
    public static void main(String[] args) {
        List<String> fruits = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");

        // 스트림 생성
        Stream<String> fruitStream = fruits.stream();

        // 중간 연산: 길이가 5 이상인 과일 필터링
        Stream<String> filteredStream = fruitStream.filter(fruit -> fruit.length() >= 5);

        // 최종 연산: 필터링된 과일을 리스트로 수집
        List<String> filteredFruits = filteredStream.collect(Collectors.toList());

        // 결과 출력
        System.out.println(filteredFruits); // ["banana", "cherry", "elderberry"]
    }
}

stream() 구문으로 스트림생성

filter를 이용해서 조건에 맞는 요소 선택 가능

가독성 있게 추출할 수 있다.


 

알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

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

 

프로그래머스

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

programmers.co.kr


Think🤔

리스트를 받아서 일단 k까지의 명예의 전당에는 그대로 들어가고,

그 이후에는 정렬을 한 뒤 제일 작은 값을 뺴면서 그 뺀 값을 answer[i]에 넣어준다.


Solution✍
import java.util.*;
import java.util.List;
import java.util.Collections;

public class Fame {
    public static void main(String[] args) {
        Solution s = new Solution();
        System.out.println(s.solution(3,new int[]{10, 100, 20, 150, 1, 100, 200}));
    }

}
class Solution{
    public int[] solution(int k, int[] score){
        int[] answer = new int[score.length];

        List<Integer> hall = new ArrayList<Integer>();

        for(int i=0; i<score.length; i++){
            if(i < k){ // 0 1 2 3
                hall.add(score[i]);
                hall.sort(Collections.reverseOrder());
            }else{
                hall.add(score[i]);
                hall.sort(Collections.reverseOrder());
                hall.remove(hall.size());
            }
            answer[i] = hall.get(hall.size() - 1);
        }
        System.out.println(Arrays.toString(answer));

        return answer;
    }
}

Review🤩

컬렉션 클래스는 리버스오더로 하고,

자료형일 경우 박싱 , 언박시을 이용해서 Arrays를 재정의한 후 오버라이드해서 오름차순,내림차순으로 변경 후에 풀어준다.


 

알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

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

 

프로그래머스

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

programmers.co.kr


Think🤔

 

처음에 int 타입을 Arrays.sort를 Comparator 메소드를 재정의해서 하려고 했으나

int 타입은 Comparator로 재정의 못함 , Integer로 가능

그래서 int 타입하고 Integer 타입의 차이점을 찾아보고

이를 재정의 할 수 있게 바꿔줌.


Solution✍
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;

// int 타입은 Integer 타입 배열로 변경해줘야 역순 출력 가능
// int : 자료형 , 산술 연산 가능 , null로 초기화 불가능
// Integer : 래퍼 클래스 , Unboxing하지 않을 경우 연산 불가 , null 값 가능
public class FruitDealer {
    public static void main(String[] args) {
        int k = 4, m = 3;
        int[] score = {4,1,2,2,4,4,4,4,1,2,4,2};
        /*
        boxed() 메소드는 intStream 같이 원시 타입 즉 자료형으로 전환하여 실행 가능하게 하는 함수
        Integer[] scoreArr = Arrays.stream(score).boxed().toArray(Integer[]::new);
        Arrays.sort(scoreArr, Collections.reverseOrder());
        */
        int answer = 0;
        int box = score.length/m;
        int minScore = 0;
        Arrays.sort(score);
        System.out.println(Arrays.toString(score));
        System.out.println("박스 개수 : " + box);
        for(int i=1; i<=box; i++){ // 현재 박스 갯수 4개
            minScore = score.length - (m*i);
            System.out.println("제일 작은 사과의 점수 : " + minScore);
            answer += score[minScore] * m;
        }
        System.out.println(answer);
    }
}

Review🤩

스택오버플로우에 ArrayUtils 를 사용하는 방법도 있다.

 

외부 라이브러리 사용

build.gradle에 의존성 추가

 

implementation 'org.apache.commons:commons-lang3:3.0'

 

알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

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

 

프로그래머스

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

programmers.co.kr


Think🤔

lastIndexOf,IndexOf,substring으로 풀려고 했으나 substring 계산 부분 어려워서 다른 방법으로 ...

 

HashMap을 이용해서
if 만약에 없으면 -1을 return해주고 , 있으면 현재 지금 위치 i에서 그 값을 가지고 있는 위치를 빼준다.
해당 값은 들어있으니 value에 위치를 넣어준다.


Solution✍
import java.util.Arrays;
import java.util.HashMap;

public class nearStr {
    public static void main(String[] args) {
        String s = "banana";
        int[] answer = new int[s.length()];

        HashMap<Character, Integer> hs = new HashMap<>();

        for(int i=0; i<s.length(); i++){
            if(!hs.containsKey(s.charAt(i))){
                answer[i] = -1;
            }else{
                answer[i] = i - hs.get(s.charAt(i));
            }
            //answer[i] = (!hs.containsKey(s.charAt(i)) ? -1 : i - hs.get(s.charAt(i)));
            hs.put(s.charAt(i),i);
        }

        System.out.println(Arrays.toString(answer));
    }
}

Review🤩

위치를 value에 저장해둬서 풀면 됨!


 

알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

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

 

프로그래머스

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

programmers.co.kr


Think🤔

쉬운 문제


Solution✍
class Solution {
    public int solution(String t, String p) {
        int answer = 0;
        
        for(int i=0; i<t.length() - p.length() + 1; i++){
            String tmp = t.substring(i , i + p.length());
            if(Long.parseLong(p) >= Long.parseLong(tmp)){
                answer++;
            }
        }
        
        return answer;
    }
}

Integer.parseInt 를 사용하게 되면 문자열 길이 초과때문에 런타임 에러

쉬운 문제..


Review🤩

Long 타입을 이용해서 풀어야 함


 

알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

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

 

프로그래머스

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

programmers.co.kr


Think🤔

문제에서 말하는 대로 받은 코카 콜라의 갯수를 세어주는 문제


Solution✍
public class Coke {
    public static void main(String[] args) {
        int a = 3;
        int b = 1;
        int n = 20;
        int recCoke = 0;
        int answer = 0; // 9

        while(n >= a){
            recCoke = n / a * b; // 받은 코카
            n = n - ( n - n % a ) + (recCoke);
            answer += recCoke;
        }
        System.out.println(answer);

    }
}

Review🤩

어렵지 않음!


 

+ Recent posts