반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


1. [SW expert Academy] SWEA 4047번 영준이의 카드 카운팅 자바(Java)

1) 난이도 : D3

 

2) 문제번호 : 4047번

 

3) 문제 출처

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIsY84KEPMDFAWN&categoryId=AWIsY84KEPMDFAWN&categoryType=CODE&problemTitle=4047&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

2. 문제

최근 영준이는 카드 게임에 꽂혀 있다.

영준이가 하는 카드 게임에는 한 덱의 카드가 필요한데 여기서 얘기하는 “한 덱”이란 스페이드, 다이아몬드, 하트, 클로버 무늬 별로 각각 A, 2~10, J, Q, K의 라벨 즉 4개의 무늬 별로

각각 13장씩 총 52장의 카드가 있는 모음을 의미한다.

편의상 A는 1, J, Q, K는 11, 12, 13으로 하여 1~13의 숫자가 카드에 적혀있다고 하자.

영준이는 몇 장의 카드를 이미 가지고 있는데 게임을 하기 위해서 몇 장의 카드가 더 필요한지 알고 싶어 한다.

그리고 이미 겹치는 카드를 가지고 있다면 오류를 출력하고자 한다.

지금 가지고 있는 카드의 정보가 주어지면 이 작업을 수행하는 프로그램을 작성하라.

 

3. 제약사항

 

4. 입력

맨 위 줄에 테스트케이스의 개수가 주어진다.

각 테스트케이스 별로 순서대로 첫 번째 줄에 지금 영준이가 가지고 있는 카드에 대한 정보 S (1 ≤ |S| ≤ 1000)가 주어진다.

S는 각각 3자리로 표현되는 카드들의 정보를 붙여서 만든 하나의 문자열인데 각 카드는 TXY 꼴로 표현되며,

T는 카드의 무늬(S, D, H, C)이며 XY는 카드의 숫자 (01 ~ 13)이다.

 

5. 출력

각 테스트케이스 별로 순서대로 한 줄씩 답을 출력하는데, 문자열 S를 보고 지금 무늬 별로(S, D, H, C 순서로) 몇 장의 카드가 부족한지 출력하여라.

이미 겹치는 카드가 있다면 문자열 “ERROR” (쌍따옴표는 출력하지 않는다)를 출력한다

 

6. 풀이

- 입력값에서 3개씩 끊어서 앞의 문자열은 char c 변수에 넣고, 그 뒤의 숫자는 num에 넣은 뒤 3개를 끊은 그 뒤에 다시 b와 b2를 비교하여 같으면 에러 출력 아니면 c에 따라 각 배열의 값을 줄여가면서 출력

7. 소스 코드

import java.util.*;

public class Solution {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt(); // 테스트 케이스 입력
		
		for(int tc=1; tc<=T; tc++) {
			int[] SDHC = new int[4]; // S : 13, D : 13, H : 13, C : 13으로 설정하기 위한 배열
			boolean sign = true;
			for(int i=0;i<SDHC.length;i++) SDHC[i] = 13; // 13으로 설정
			
			String a = sc.next(); // 입력
			
			//3개씩 끊어서 확인
			out : for(int i=0;i<a.length();i+=3) {
				String b = a.substring(i,i+3);
				char c = b.charAt(0);
				int num = Integer.parseInt(b.substring(1,3));
				
				for(int j=i+3;j<a.length();j+=3) {
					String b2 = a.substring(j,j+3);
					char c2 = b.charAt(0);
					int num2 = Integer.parseInt(b.substring(1,3));
					
					if(b.equals(b2)) {
						System.out.printf("#%d ERROR",tc);
						sign = false;
						break out; 
					}
				}
				
				if(c=='S') SDHC[0]--;
				else if(c=='D') SDHC[1]--;
				else if(c=='H') SDHC[2]--;
				else if(c=='C') SDHC[3]--;
			}
			
			if(sign==true) {
				System.out.printf("#%d ",tc);
				for(int i=0;i<SDHC.length;i++) System.out.print(SDHC[i] + " ");
			}
			System.out.println();
			
		}
	}
}

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기