inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

알고리즘 문제풀이 For Java - 2회차

SodiumSulfate
0

스터디일지 : 2021-06-25 금요일

문제

해시

번호 링크 새리 시온 산희 케이
1 완주하지 못한 선수 O O O O O O
2 전화번호 목록 O O O O O O
3 위장 O O O O X O
4 베스트앨범 X O O X O O

오늘의 알고리즘문제풀이 담당코드 && 발표내용

HASH - 완주하지 못한 선수 by 동

문제

풀이

코드

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

string solution(vector<string> participant, vector<string> completion) {
    string answer = "";
    
    sort(participant.begin(),participant.end());
    sort(completion.begin(),completion.end());
    int len = participant.size();
    
    
    for(int i=0 ; i<len ; i++) {
        if(participant[i] !=completion[i]) {
            answer = participant[i];
            break;
        }
    }
    
    
    return answer;
}
#test.py
from operator import *

def solution(participant, completion):
    
    answer = ''
    participant.sort()
    completion.sort()

    
       
    for i in range(len(completion)) :
        if participant[i] != completion[i]:
            answer = participant[i]
            break
    

    if answer == '' :
        answer = participant[-1]
    
    return answer
import java.util.*;

public class first{
	public static void main(String[] args) 
	{
		Solution mysol = new Solution();
		String p1[] = {"leo", "kiki", "eden"};
		String c1[] = {"eden", "kiki"};
		String ret = mysol.solution(p1,c1);
		System.out.println(ret);

	}
}


class Solution {
    public String solution(String[] participant, String[] completion) {
        
    	String answer = "";
    	
    	
    	Arrays.sort(participant);
    	Arrays.sort(completion);
    	
    	for(int i=0 ; i<completion.length ; i++) { 
    		if(!participant[i].equals(completion[i])){
    			return participant[i];
    		}
    	}
    	
    	
        return participant[completion.length];
    }
}

HASH 전화번호 목록 문제 By 연

제한

풀이

코드

package progrs;

import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;

public class Solution42577 {
    public boolean solution(String[] phone_book) {
        Map<String, Integer> map = new HashMap<>();
        for (int i = 0; i < phone_book.length; i++) {
            map.put(phone_book[i], i);
        }

        for (int i = 0; i < phone_book.length; i++) {
            for (int j = 0; j < phone_book.length; j++) {
                if (map.containsKey(phone_book[i].substring(0, j))) {
                    return false;
                }
            }
        }

        return true;

    }

    public static void main(String[] args) {
        Solution42577 sol = new Solution42577();
        sol.solution(new String[]{"12", "123", "1235", "567", "88", "111111", "0", "000000000000"});
    }
}
#include <iostream>
#include <string>
#include <stack>
#include <algorithm>
#include <vector>
#include <cmath>
#include <queue>

using namespace std;

const int DEBUG = 0;

bool lcomp(string a, string b) {
    int la = a.length();
    int lb = b.length();
    if (la < lb) {
        return true;
    }
    else if (la > lb) {
        return false;
    }
    else if (la == lb) {
        return (a < b);
    }
    else {
        //이런경우는 없다
        return (a < b);
    }
    
}

bool solution(vector<string> phone_book) {
    bool answer = true;

    sort(phone_book.begin(), phone_book.end(), lcomp);
    int n = phone_book.size();
    for (int i = 0; i < n; i++) {
        for (int j = i+1; j < n; j++) {
            int ret = phone_book[j].find(phone_book[i]);
            //if (0<= ret && ret<=n) {
            if (0== ret) {
                return false;
            }
        }
    }

    return answer;
}




해설

HASH - 위장 by 세리

문제

풀이

코드

import java.util.*;

class Solution {
    public int solution(String[][] clothes) {
        HashMap<String, Integer> map = new HashMap<>();
        
        for (String[] cloth : clothes) {
            map.put(cloth[1], map.getOrDefault(cloth[1], 0) + 1);
        }
        
        int result = 1;
        for (String key : map.keySet()) {
            result *= map.get(key) + 1;
        }
        
        return result - 1;
    }
}

Hash 베스트엘범 By 시온

수도코드 스니핏

해설

    map<string, int> gnr_playtimes;
    map<string, map<int, int>> bestof_in_gnr
 

    //장르별로 플레이횟수를 구하기
    int len = genres.size();
    for (int i = 0; i < len; i++) {
        gnr_playtimes[genres[i]] += plays[i];
        //genres[i] string값을 Key로 plays 를 하나씩 추가

        bestof_in_gnr[genres[i]][i] = plays[i];
        //##
        // 이중 map
        //1차 Key: 장르명 중에서 >>> 2차 Key : plays의 인덱스
    }
   
import java.util.*;

class Solution {
    
    class Song implements Comparable<Song> {
        int id, play;
        String genre;
        
        Song(int id, int play, String genre){
            this.id = id;
            this.play = play;
            this.genre = genre;
        }
        
        @Override
        public int compareTo(Song o){
            if(this.play == o.play){
                return this.id - o.id;
            } else {
                return -(this.play - o.play);
            }
        }
    }
    
    ArrayList<Integer> bestAlbum;
    ArrayList<Song> songList;
    HashMap<String, Integer> genreMap;
    HashMap<String, Integer> albumMap;
    
    public int[] solution(String[] genres, int[] plays) {
        bestAlbum = new ArrayList<>();
        songList = new ArrayList<>();
        genreMap = new HashMap<>();
        albumMap = new HashMap<>();
        
        for(int i = 0 ; i < genres.length ; ++i){
            int id = i;
            int play = plays[i];
            String genre = genres[i];
            
            songList.add(new Song(id, play, genre));
            
            if(genreMap.containsKey(genre)){
                genreMap.put(genre, genreMap.get(genre) + play);
            } else {
                genreMap.put(genre, play);
            }
        }
        
        Collections.sort(songList, new Comparator<Song>(){
           @Override
            public int compare(Song s1, Song s2){
                if(s1.genre.equals(s2.genre)){
                    return s1.compareTo(s2);
                } else {
                    return -(genreMap.get(s1.genre) - genreMap.get(s2.genre));
                }
            }
        });
        
        for(Song song : songList){
            if(!albumMap.containsKey(song.genre)){
                albumMap.put(song.genre, 1);
                bestAlbum.add(song.id);
            } else {
                int genreCnt = albumMap.get(song.genre);
                
                if(genreCnt >= 2) continue;
                else {
                    albumMap.put(song.genre, genreCnt + 1);
                    bestAlbum.add(song.id);
                }
            }
        }
        
        int[] answer = new int[bestAlbum.size()];
        for(int i = 0 ; i < answer.length ; ++i){
            answer[i] = bestAlbum.get(i);
        }
        
        return answer;
    }
}

## Hash 베스트엘범 By 산희

답변 0