뚱땅뚱땅

[문제] 정올 1620 전화번호 속의 암호 본문

알고리즘/PRO 시험 대비

[문제] 정올 1620 전화번호 속의 암호

양순이 2023. 5. 8. 16:07
728x90

# 링크: http://jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=893&sca=99&sfl=wr_hit&stx=1620 

 

JUNGOL

 

www.jungol.co.kr

 

 

틀렸었던 조건들

1. 전화번호 형식이 "-"로 끝날 수 있음

   예) "0-6-6-6-5-121-1-5854-" 

2. 모든 더미에 대하여 4자리 이상인지 확인 필요

 

배운 것들

1. StringTokenizer로 delimter 설정 가능

최종 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class J1620_전화번호속의암호 {
	static String s; // 100자 내의 스트링
	static int p; // 1~9 수
	static int m; // 더미 번호
	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(in.readLine());
		s = st.nextToken();
		p = Integer.parseInt(st.nextToken());
		m = Integer.parseInt(st.nextToken());
		
		//1. s 의 더미  파악
		String dummy = getDummy(s, m);
		//2. 처리조건 안맞는거 처리 
		if(checkAllDummy() == false || dummy.equals("false") || !(p>=1 && p<=9)) {
			System.out.println("INPUT ERROR!");
			return;
		}
		//3. 자리에 숫자 더하기
		System.out.println(plus(dummy, p));
	}
	// 더미 중 4자리 넘어가는게 하나라도 있는지 체크
	static boolean checkAllDummy() {
		StringTokenizer st = new StringTokenizer(s, "-");
		int sLen = st.countTokens();
		
		String dummy = "";
		for(int i=0;i<sLen;i++) {
			dummy = st.nextToken();
			if(dummy.length() > 4) return false;
		}
		return true;
	}
	// dummy 각 자리에 p만큼 더하기
	static String plus(String dummy, int p) {
		String ans = "";
		dummy = paddingZero(dummy); // 0 패딩시키기
		
		for(int i=0;i<dummy.length();i++) {
			int num = dummy.charAt(i) - '0';
			num += p;
			// 2자리 넘어가면 일의자리만 남기기
			if(num > 9) {
				num = num % 10;
			}
			
			ans += (num+"");
		}
		return ans;
	}
	// 4자리가 아닌 더미에 대하여 0으로 패딩시키기
	static String paddingZero(String str) {
		int len = str.length();

		if(len < 4) {
			int zero = 4 - len;
			String z = "";
			for(int i=0;i<zero;i++) {
				z += "0";
			}
			str = z + str;
		}
		return str;
	}
	// s의 dummyNumber 번째 더미 구하기
	static String getDummy(String s, int dummyNumber) {
		StringTokenizer st = new StringTokenizer(s, "-");
		int sLen = st.countTokens();
		
		// 전화번호가 "-"로 끝나는 경우 예외처리
		if(dummyNumber == sLen+1 && s.charAt(s.length()-1) == '-') {
			return "";
		}
		if(dummyNumber > sLen) return "false";

		String dummy = "";
		for(int i=1;i<=dummyNumber;i++) {
			dummy = st.nextToken();
		}
		return dummy;
	}
}
728x90
Comments