TIL

2023-10-24 TIL(프로그래머스)

우성팔 2023. 10. 24.

오늘 git으로 협업하기 위한 강의를 들었는데 이해가 되지 않는 부분이 있어서 

 

다시 보면서 머릿속에서 정리를 한 다음에 TIL로 써야 할 것 같다!

달리기 경주

 

Java 풀이 코드

public static String[] solution(String[] players, String[] callings) {
		// for문 2개를 이용해서 선수를 찾으면 프로그래머스 테스크 케이스 8번부터
        // 시간 초과가 떠서 HashMap을 사용!
        HashMap<String, Integer> humanHashMap = new HashMap<String, Integer>();
        for(int i = 0 ; i < players.length ; i ++){
            humanHashMap.put(players[i],i); // key,value 쌍으로 선수 이름에 value부여
        }
        for(String called: callings) {
            int index = humanHashMap.get(called); // 불려지는 선수의 value를 index에 대입
            String forwardHuman = players[index-1]; // 앞질러질 선수를 구해놓음

            humanHashMap.put(called,index - 1); // 해시맵의 key, value값을 바꿔줌
            humanHashMap.put(forwardHuman,index); // 해시맵의 key, value값을 바꿔줌

            players[index-1] = called;  // 불려진 선수를 기존의 본인 앞 선수 순위로
            players[index] = forwardHuman;  // 앞질러진 선수는 불려진 선수 순위로
        }
        return players;
    }

Python 풀이 코드

def solution(players, callings):
    human_dict = {} 
    for i, j in enumerate(players):
        human_dict[j] = i 

    for human in callings:
        index = human_dict.get(human)
        forward_human = players[index-1]
        human_dict[human], human_dict[forward_human] = index - 1, index
        players[index-1], players[index] = human, forward_human
    return players

로직은 java와 python이 똑같다!

다만 java → HashMap / python → dictionary 자료형을 이용했다는 점!

 


추억점수

 

Java 풀이 코드

public static int[] solution(String[] name, int[] yearning, String[][] photo) {
        int[] answer = new int[photo.length];
        int a = 0;
        HashMap<String,Integer> personHashMap = new HashMap<String,Integer>();

        for(int i = 0 ; i < name.length ; i ++){
            personHashMap.put(name[i],yearning[i]);
        }

        for(String[] photoPersonArray: photo){
            int photoSum = 0;
            for(String photoPerson : photoPersonArray){
                if(personHashMap.get(photoPerson) != null) { // == if(personHashMap.containsKey(photoPerson)){
                    photoSum += personHashMap.get(photoPerson);
                }
            }
            answer[a] += photoSum;
            a ++;
        }
        return answer;
    }

13번째 줄에 get으로 photoPerson을 찾았을 때 없으면 null값 반환 

Python 풀이 코드

def solution(name, yearning, photo):
    answer = []
    person_dict = {}
    for i in range(len(name)):
        person_dict[name[i]] = yearning[i]

    for i in photo:
        photo_sum = 0
        for j in i:
            if j in name:
                photo_sum += person_dict[j]
        answer.append(photo_sum)
    return answer

달리기 경주 문제처럼 HashMap과 dictionary 형을 이용하여 풀었고 비슷한 것 같다

이 문제도 java와 python 로직은 똑같고

이번엔 각 이름에 이름에 해당하는 점수를 부여하였다는 점이 달리기 경주 문제랑 차이가 난다고 볼 수 있다

 

python에서는 in을 이용해서 해당 이름이 있는지 없는지 확인하였지만

java에서는 HashMap.containsKey() 를 이용해서 확인하였다는 점이 달랐다


 

파이썬에 익숙해지기 위해서 프로그래머스 Lv.0 문제를 다 풀어보았고 내배캠을 시작하고부터 java로도 같이 풀기 시작해서 처음부터 java, python 같이 풀었더라면 java에도 많이 익숙해질 수 있었을 것 같은데 아쉽다는 생각이 들지만

Lv.1 문제들로 익숙해져 봐야겠다!

댓글