[Programmers] 신고 결과 받기 (JAVA)

2022. 3. 19. 02:01· Algorithm
반응형

- 알고리즘 분류 : 구현

- 사용 언어 : JAVA

- 문제 요점

  1. 한 사람이 같은 대상에게 여러번 신고한 것은 1번으로 간주한다.

필자는 바로 떠올린 알고리즘으로 풀어버렸는데, HashMap을 사용하면 훨씬 간결하고 편하게 구현할 수 있을 것이다.

 

소스 설명은 주석을 참고해주세요.

import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {

	public static int[] solution(String[] id_list, String[] report, int k) {
		
		// 각 사용자가 누구를 신고했는 지 저장해두는 리스트
        ArrayList<ArrayList<Integer>> reportList = new ArrayList<>();
        
        // 각 사용자가 받은 신고의 횟수를 모아두는 배열
        int[] reportCountArr = new int[id_list.length];
		
        // 각 사용자의 수만큼 리스트 할당
        for(int i=0; i<id_list.length; i++) {
        	reportList.add(new ArrayList<Integer>());
        }
        
        // reportList에 저장.
        for(int i=0; i<report.length; i++) {
        	StringTokenizer st = new StringTokenizer(report[i]);
        	
        	String from = st.nextToken();
        	String to = st.nextToken();
        	
        	int fromIdx = 0;
        	for(; fromIdx<id_list.length; fromIdx++) {
        		if(from.equals(id_list[fromIdx])){
        			break;
        		}
        	}
        	
        	int toIdx = 0;
    		for(; toIdx<id_list.length; toIdx++) {
    			if(to.equals(id_list[toIdx])) {
    				break;
    			}
    		}
        	
        	// 같은 사람이 같은 대상에게 이전에 신고했었는지 확인
        	boolean check = false;
        	for(int j=0; j<reportList.get(fromIdx).size(); j++) {
        		int temp = reportList.get(fromIdx).get(j);
        		
        		if(toIdx == temp) {
        			check = true;
        			break;
        		}
        	}
        	
        	// 같은 사람이 같은 대상에게 이전에 신고했었다면 무시.
        	if(check) {
        		continue;
        	}
        	else {
        		
        		reportList.get(fromIdx).add(toIdx);
        		
        		reportCountArr[toIdx]++;
        	}
        }
        
        int[] answer = new int[id_list.length];
        
        for(int i=0; i<reportCountArr.length; i++) {
        	
        	// 신고 대상자 일 경우
        	if(reportCountArr[i] >= k) {
        		
        		for(int j=0; j<reportList.size(); j++) {
        			// 자기 자신에게 신고하는 일은 없으니 해당 경우는 건너뛰기
        			if(j==i) {
        				continue;
        			}
        			
        			for(int m=0; m<reportList.get(j).size(); m++) {
        				int idx = reportList.get(j).get(m);
        				
        				if(idx == i) {
        					answer[j]++;
        					break;
        				}
        			}
        		}
        	}
        }
        
        
        return answer;
    }
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		String[] list1 = {"muzi", "frodo", "apeach", "neo"};
		String[] list2 = {"muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"};
		int k= 2;
		
		int[] result = solution(list1, list2, k);
		for(int i=0; i<result.length; i++) {
			System.out.println(result[i]);
		}
		
	}

}
반응형

'Algorithm' 카테고리의 다른 글

[BAEKJOON] 15649번 : N과 M(1) (JAVA)  (0) 2022.03.21
[Programmers] k진수에서 소수 개수 구하기 (JAVA)  (0) 2022.03.20
[BAEKJOON] 15686번 : 치킨배달 (JAVA)  (0) 2022.03.18
[BAEKJOON] 1261번 : 알고스팟 (JAVA)  (0) 2022.03.14
[BAEKJOON] 1931번 : 신입사원 (JAVA)  (0) 2022.03.12
'Algorithm' 카테고리의 다른 글
  • [BAEKJOON] 15649번 : N과 M(1) (JAVA)
  • [Programmers] k진수에서 소수 개수 구하기 (JAVA)
  • [BAEKJOON] 15686번 : 치킨배달 (JAVA)
  • [BAEKJOON] 1261번 : 알고스팟 (JAVA)
멍목
멍목
개발 관련 새롭게 알게 된 지식이나 좋은 정보들을 메모하는 공간입니다.
반응형
멍목
김멍목의 개발블로그
멍목
전체
오늘
어제
  • 분류 전체보기 (514)
    • BE (190)
      • Spring (21)
      • Java (141)
      • Kotlin (6)
      • JPA (22)
    • FE (33)
      • Javascript (16)
      • Typescript (0)
      • React (5)
      • Vue.js (9)
      • JSP & JSTL (3)
    • DB (32)
      • Oracle (22)
      • MongoDB (10)
    • Algorithm (195)
    • Linux (8)
    • Git (6)
    • etc (42)
    • ---------------------------.. (0)
    • 회계 (4)
      • 전산회계 2급 (4)
    • 잡동사니 (2)

블로그 메뉴

  • 홈
  • 관리

공지사항

인기 글

태그

  • 자바공부
  • JPA
  • 자바 테스팅 프레임워크
  • 자기 공부
  • 코틀린
  • 자바 공부
  • 코테공부
  • vue3 공부
  • 자기개발
  • Effective Java
  • java 8
  • 전산회계 2급 준비
  • 이펙티브자바
  • 더 자바 애플리케이션을 테스트하는 다양한 방법
  • JPA 공부
  • Oracle
  • MongoDB 기초부터 실무까지
  • 프로젝트로 배우는 Vue.js 3
  • 알고리즘공부
  • 자기 개발
  • MongoDB with Node.js
  • 자기공부
  • 자바 개발자를 위한 코틀린 입문
  • 알고리즘 공부
  • 이펙티브 자바
  • 코테 공부
  • junit5
  • Java to Kotlin
  • MongoDB 공부
  • 더 자바 Java 8

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
멍목
[Programmers] 신고 결과 받기 (JAVA)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.