- 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 |