쿠릉쿠릉 쾅쾅
쿠릉쿠릉 쾅쾅
쿠릉쿠릉 쾅쾅
250x250
전체 방문자
오늘
어제
  • 분류 전체보기
    • HTML CSS
    • 잡담
    • 프로그래밍 꿀팁 사이트
    • 코딩 도서
    • [자바]
      • 디자인 패턴
      • 자바의 정석 - 3판
      • 자바
      • 자바 문법
    • git
    • [TDD]
    • 개발 서적 독후감
      • 클린 코더
      • 토비 스프링3
      • 객체지향의 사실과 오해
      • 모던 자바 인 액션
      • 엘레강트 오브젝트
    • CS
      • 운영체제
      • HTTP
    • [SQL]
      • SQL 기초
      • 혼자공부하는SQL
    • [ Spring ]
      • REST API
      • Spring Toy
      • Spring 에러
      • Spring
      • Spring 입문
      • Spring 핵심 원리
      • SpringMVC 1편
      • SpringMVC 2편
      • Spring Boot를 이용한 RESTful We..
      • Batch
    • [JPA]
      • JPA
      • JPA 에러
      • JPA 프로그래밍 - 기본편
      • 스프링 부트와 JPA 활용 1 - 웹 애플리케이..
      • 실전! 스프링 부트와 JPA 활용2 - API 개..
      • 실전! 스프링 데이터 JPA
      • 실전! Querydsl
    • 인텔리제이
    • [DB]
      • DB
      • H2
    • Gradle
    • 면접
    • [알고리즘]
      • 알고리즘
      • 자료구조
      • 자바 알고리즘 공부
    • [프로젝트]
    • 쿠릉식 객체지향 사고
    • 리눅스

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • REST API
  • springboot
  • 스프링부트
  • querydsl
  • JPA
  • Spring
  • GitHub
  • 함수형인터페이스
  • 스프링
  • 깃허브
  • 재귀
  • java
  • Git
  • 알고리즘
  • 자료구조
  • 자바
  • 백준
  • http
  • MVC
  • SQL

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쿠릉쿠릉 쾅쾅

쿠릉쿠릉 쾅쾅

[알고리즘]/알고리즘

[알고리즘] 백준 8896번 : 가위 바위 보 (실버3)

2022. 4. 13. 16:27
728x90

 

 

문제

https://www.acmicpc.net/problem/8896

 

 

📌 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
 
public class Main {
	
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	
    public static void main(String[] args) throws IOException  {
    	
    	
    	int T = Integer.parseInt(br.readLine());  // 테스트 케이스 수
    	
    	while(T --> 0) {
    		solution();
    	}
    }
    
    static void solution() throws IOException {
    	
		String[] arr;  // 가위바위보 담을 배열
		
		int N = Integer.parseInt(br.readLine());  // 사람 수
		arr = new String[N];  // 사람 수 만큼 배열 크기 세팅
		
		// 사람당 가위바위보 패 입력값 받기
		for(int i=0; i<N; i++) {
			arr[i] = br.readLine();
		}
 
		// 가위바위보를 총 몇 판하는지 k값에 입력
		int k = arr[0].length();
		
		// 패배자의 인덱스값을 담을 리스트 
		List<Integer> loser = new ArrayList<>();
		
		iLoop:
		for(int i=0; i<k; i++) {  // i는 몇 번째 판인지 의미 (문자열의 index값)
			
			// 승자가 없는 경우 (패배자 리스트가 전체 인원과 같으면 승자가 없다.)	
			if(loser.size()==N) {
				System.out.println(0);
				return;
			}
		
			/**
			 *  무승부 체크 처리
			 */
			boolean checkP = false;
			boolean checkS = false;
			boolean checkR = false;
			
			for(int m=0; m<N; m++) {  // 사람 수
				if(arr[m].charAt(i)==' ') continue;  // 공백이면 패배자이므로 pass
				
				if(arr[m].charAt(i)=='P') {  // P가 존재할 경우
					checkP = true;
				}
				
				if(arr[m].charAt(i)=='S') {  // S가 존재할 경우
					checkS = true;
				}
				
				if(arr[m].charAt(i)=='R') {  // R이 존재할 경우
					checkR = true;
				}
				
				// P,S,R 모두 존재하는 경우 무승부 처리하고 다음 판으로 넘긴다.
				if(checkP && checkS && checkR) {
					continue iLoop;
				}			
			}
			
			// S만 존재하는 경우 무승부 처리하고 다음 판으로 넘긴다.
			if(!checkP && checkS && !checkR) {
				continue;
			}
			
			// R만 존재하는 경우 무승부 처리하고 다음 판으로 넘긴다.
			if(!checkP && !checkS && checkR) {
				continue;
			}
 
			// P만 존재하는 경우 무승부 처리하고 다음 판으로 넘긴다.
			if(checkP && !checkS && !checkR) {
				continue;
			}
			
		
			/**
			 * 무승부가 아닐 경우
			 */
			
			// P와 R만 존재하는 경우 (P가 이긴다.)
			if(checkP && !checkS && checkR) {
				for(int j=0; j<N; j++) {  // N은 사람의 수 의미
					
					if(arr[j].charAt(i)==' ') continue; // 공백이면 패배자이므로 pass
					
					if(arr[j].charAt(i)=='R') {  // 패배자 판별
						arr[j] = arr[j].replaceAll(".", " "); // 패배자는 공백 처리
						loser.add(j+1);  // 사람 index는 1부터 시작하므로 j+1로 패배자 인덱스 값 대입 
						continue;
					}
				}
				continue iLoop;
			}
			
			
			// P와 S만 존재하는 경우 (S가 이긴다.)
			if(checkP && checkS && !checkR) {
				for(int j=0; j<N; j++) { 
					
					if(arr[j].charAt(i)==' ') continue; 
					
					if(arr[j].charAt(i)=='P') {  // 패배자
						arr[j] = arr[j].replaceAll(".", " "); 
						loser.add(j+1); 
						continue;
					}
				}
				continue iLoop;
			}
			
			
			// S와 R만 존재하는 경우 (R이 이긴다.)
			if(!checkP && checkS && checkR) {
				for(int j=0; j<N; j++) {  
					
					if(arr[j].charAt(i)==' ') continue;
					
					if(arr[j].charAt(i)=='S') {  // 패배자
						arr[j] = arr[j].replaceAll(".", " ");
						loser.add(j+1);
						continue;
					}
				}
				continue iLoop;
			}
			
		} // end of iLoop
		
		// 패배자 리스트의 사람 수 
		int loserSize = loser.size();
		
		// 승자가 없는 경우 (최후의 1인이 없을 경우 승자가 없다.)	
		if(loserSize!=N-1) {
			System.out.println(0);
			return;
		}
		
		/**
		 * 최후의 승자 1인이 있을 경우
		 */
		
		// 패배자 리스트를 오름차순으로 정렬
		Collections.sort(loser);
		
		// 마지막번째 사람이 승자가 아닐 경우
		for(int i=1; i<=N-1; i++) {
			if(i!=loser.get(i-1)) {
				System.out.println(i);
				return;
			}
		}
		
		// 마지막번째 사람이 승자
		System.out.println(N);
    	
    }
}

 

 

 

 

 

 

728x90

'[알고리즘] > 알고리즘' 카테고리의 다른 글

[알고리즘] 백준 1644번 : 소수의 연속합  (0) 2022.04.14
[알고리즘] 백준 2003번 : 수들의 합2 (실버3)  (0) 2022.04.14
백준 10820번 : 문자열 분석 (브론즈2)  (0) 2022.04.12
백준 1718번 : 암호 (브론즈2)  (0) 2022.04.12
[알고리즘] 백준 1003번 : 피보나치 함수  (0) 2022.04.12
    '[알고리즘]/알고리즘' 카테고리의 다른 글
    • [알고리즘] 백준 1644번 : 소수의 연속합
    • [알고리즘] 백준 2003번 : 수들의 합2 (실버3)
    • 백준 10820번 : 문자열 분석 (브론즈2)
    • 백준 1718번 : 암호 (브론즈2)
    쿠릉쿠릉 쾅쾅
    쿠릉쿠릉 쾅쾅
    깃허브 주소 : https://github.com/kureung

    티스토리툴바