- Today
 
- Total
 
개발하는 고라니
그룹 스터디 중 문제에 대한 풀이 본문
# 1
1부터 9까지의 숫자 개수를 가질 수 있는 2차원 배열(String[][] eachNumber)과 전체 숫자의 합을 가질 수 있는 int(int sum)를 가진 class Numbers가 있다.
사용자로부터 일의 자리 10개의 숫자(정수)를 입력받아 이를 Number클래스의 2차원 배열과 그 합을 구해 출력하시오.
* 입력된 숫자가 10개를 초과하면 10개까지만 짤라서, 10개가 안되면 입력했던 숫자를 다시 보여주고 이어서 다시 입력받게끔 구현
* 숫자가 아닌 값을 입력받으면 잘못된 값을 빼서 입력받은 숫자만 다시 보여주고 이어서 다시 입력받게끔 구현
입력 예 : 1234567890
출력 예 : 배열출력
-----
1 : 1
2 : 1
3 : 1
4 : 1
5 : 1
6 : 1
7 : 1
8 : 1
9 : 1
-----
전체 숫자의 합 : 45
국비과정 중 그룹 스터디에서 좋은 문제를 내주셔서 풀이를 공유한다. 조건 처리가 관건이었던 문제였다.
1. 0~9까지 숫자 중, 0은 입력 가능하지만 결과로서 기록되진 않는다.
2. 숫자로만 10자리를 가져야한다.
3. 문자가 존재하면 문자를 모두 제거하고 기존 숫자받은 거에 덧붙여야한다.
4. 숫자로 10개 이상이어도 10개만 결과로 인정한다.
# Code </>
import java.util.Scanner;
class Numbers{
	
	int sum;
	String[] eachNumber;
	
	public Numbers() {
		sum = 0;
		eachNumber = new String[10];
	}
	
}
public class DicoProblem {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		Numbers numbers = new Numbers();
		
		String string = sc.nextLine();
		while(true) {
						
			//case 1: 10개보다 적을 때
			if(string.length() < 10) {
				System.out.println("현재 숫자들 : " + string);
				System.out.println( (10 - string.length()) + "개의 숫자를 더 입력해주세요.");
				
				String tmp = sc.nextLine();
				string += tmp;
			}
			//case 1: 10개보다 적을 때
			
			//case 2: 문자열에 숫자가 아닌 것이 들어있을 때
			StringBuilder sb = new StringBuilder(string);
			
			while(true) {
				boolean flag = true;
				
				for(int i=0; i<sb.length(); i++) 
					if(sb.charAt(i) < '0' || sb.charAt(i) > '9') {
						sb.deleteCharAt(i);
						flag = false;
					}
				
				if(flag) {
					string = sb.toString();
					break;
				}
			}
			
			//case 2: 문자열에 숫자가 아닌 것이 들어있을 때
			
			//case 3: 숫자가 10개 (10개 이상도 무관함)
			if(string.length() >= 10) {
				
				System.out.println("# 현재 숫자 : " + string);
				int[] eachNumber = new int[10];
				int sum = 0;
								
				for(int i=0; i<10; i++) {
					char num = string.charAt(i);
					
					if(num >= '1' && num <= '9') {
						sum += num -'0';
						eachNumber[num - '0']++;
					}
				}
				
				//Numbers에 옮기기
				numbers.sum = sum;
				
				for(int i=1; i<10; i++)
					numbers.eachNumber[i] = Integer.toString(eachNumber[i]);
				//Numbers에 옮기기
				
				break;
			}
			//case 3: 숫자가 10개 (10개 이상도 무관함)
			
		} //.while 끝
		
		//결과 출력
		System.out.println("-------------------------------------");
		for(int i=1; i<10; i++)
			System.out.println(i + ": " + numbers.eachNumber[i]);
		
		System.out.println("-------------------------------------");
		System.out.println("합: " + numbers.sum);
		
		sc.close();
	}
}
# 2
과제 make2dStringArray(2,4); 라는 함수를 정의한다 make2dStringArray(int a, int b)
함수는 a 행과 b 열 개수를 가지는 2차원 String배열을 만들고 그안의 각인덱스 안에는 "[i][j]" (여기서 ij는 인덱스 i, 인덱스 j 이다) 의 문자열이 들있다. 함수는 이러한 2차원 배열을(그배열의 참조변수를) return 한다. main 함수에서 make2dArray(a,b); 호출하여 2차원배열을 받고 그 배열의 내용을 반복문을 이용하여 출력하시오 ex) array[2][3] 안에는" [2][3] " 이라는 문자열이 들어가 있습니다
import java.util.Scanner;
public class DicoProblem2 {
	static String[][] make2dStringArray(int y, int x){
		
		String[][] result = null;
		
		if(y < 0 || x < 0) 
			return result;
		
		else 
			result = new String[y][x];
		
		
		for(int i=0; i<y; i++)
			for(int j=0; j<x; j++) {
				StringBuilder sb = new StringBuilder();
				
				sb.append('[').append(i).append(']');
				sb.append('[').append(j).append(']');
				
				result[i][j] = sb.toString();
			}
		
		return result;
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int y = Integer.parseInt(sc.nextLine());
		int x = Integer.parseInt(sc.nextLine());
		
		String[][] result = make2dStringArray(y, x);
		
		for(int i=0; i<y; i++) {
			for(int j=0; j<x; j++) 
				System.out.print(result[i][j] + " ");
			
			System.out.println();
		}
	}
}'잡동사니' 카테고리의 다른 글
| 첫 서비스 장애, 느낀점 (3) | 2022.01.16 | 
|---|---|
| 취업 준비를 마치며 (8) | 2021.11.02 | 
| Programmers의 선물 (4) | 2021.10.22 | 
| 국비교육을 마치며 (2) | 2021.07.17 | 
| 2021-06-07 Dependency (0) | 2021.06.07 |