728x90
level 1 : 신고 결과 받기
https://programmers.co.kr/learn/courses/30/lessons/92334
🎯 코드(C++)
#include <string>
#include <vector>
#include <unordered_map>
#include <sstream>
using namespace std;
vector<int> solution(vector<string> id_list, vector<string> report, int k) {
vector<int> answer;
unordered_map<string, unordered_map<string, int>> um;
unordered_map<string, int> report_id;
for (int i = 0; i < report.size(); i++) {
stringstream ss(report[i]);
string s1, s2;
ss >> s1 >> s2;
um[s1][s2]++;
if (um[s1][s2] == 1) {
report_id[s2]++; //한 유저가 처음 신고한 경우
}
}
for (int i = 0; i < id_list.size(); i++) {
int num = 0;
for (auto m : um[id_list[i]]) {
if (report_id[m.first] >= k) {
num++;
}
}
answer.push_back(num);
}
return answer;
}
🎯 코드(JAVA)
import java.util.*;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
HashMap<String, List<String>> hashmap = new HashMap<>();
HashMap<String, Integer> report_id = new HashMap<>();
for(int i=0; i< id_list.length; i++){
List<String> l = new LinkedList<>();
hashmap.put(id_list[i], l);
}
for(int i=0; i< report.length; i++) {
String[] s = report[i].split(" ");
if(hashmap.get(s[0]).contains(s[1]) == false){
hashmap.get(s[0]).add(s[1]);
if(report_id.containsKey(s[1]) == false){
report_id.put(s[1], 1);
}else {
report_id.put(s[1], report_id.get(s[1]) + 1);
}
}
}
for(int i=0; i< id_list.length; i++){
Integer num = 0;
for(String s : hashmap.get(id_list[i])){
if(report_id.get(s) >= k){
num++;
}
}
answer[i] = num;
}
return answer;
}
}
🎯 설명
해시 맵
C++ : unordered_map, JAVA와 달리 바로 접근 가능 값 변경이 쉬움.
JAVA : HashMap<>(), C++과 달리 바로 접근이 불가능하고 get, put을 사용.
문자열 나누기
C++ : sstream 사용
JAVA : split("") 사용
hashmap에 유저가 신고한 ID를 저장한다.
한 유저가 처음 신고한 경우 report_id에 신고된 ID의 신고당한 횟수를 증가시켜준다.
- C++은 한 번 신고하였는지 확인
- JAVA는 list에 이미 신고되어있는지 확인
id_list 순서대로 신고한 유저가 정지 기준이 넘었는지 확인한다.
- C++은 auto로 반복
- JAVA는 auto 사용 불가, 알맞은 변수 선언 해주어야 함
고찰
LG CNS는 코딩테스트에 C++가 없다는 소식을 듣고 C로 시험 볼까 JAVA로 시험 볼까 고민하다가 JAVA로 결정!
JAVA에서 라이브러리로 해시맵, 리스트 등 사용할 수 있어 JAVA를 사용하기로 결정하였다.
그래서 오늘부터 알고리즘 한문제씩 푸는데 C++와 JAVA 모두 풀어보기로 한다.
주의
- JAVA에서 answer이 배열일 때는 new로 할당해주어야 한다.
- import java.util.*을 사용하여 모든 라이브러리를 import해준다.
- 변수의 앞은 항상 대문자로! int -> Integer
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스(C++, JAVA) / level 1 : 음양 더하기 (0) | 2022.03.25 |
---|---|
프로그래머스(C++, JAVA) / level 1 : 문자열 다루기 기본 (0) | 2022.03.25 |
프로그래머스(C++) / 프로그래머스 level 2 : 양궁대회 (0) | 2022.02.07 |
알고리즘(C++) / 프로그래머스 level 2 : 게임 맵 최단거리 (0) | 2022.02.04 |
프로그래머스(C++) / level 2 : 단체사진 찍기 (0) | 2022.02.03 |
댓글