본문 바로가기
학부공부/Java_Basic

Chapter 10. Object-Oriented Thinking(3)[Java Basic]

by sonpang 2021. 11. 6.
반응형

10.H - MyCharacter 클래스

Time Limit: 1s Memory Limit: 128MB

 

DESCRIPTION

샘플 입력에 대해서 샘플 아웃풋과 같은 결과를 보여주는 MyCharacter를 만들자. The Character class is provided in the Java library. Provide your own implementation for this class. Name the new class MyCharacter.

 

INPUT

* Line 1 : 테스트케이스 T (1~1,000)

* Line 2 ~ T+1 : 문자

 

OUTPUT

* Line 1 ~ 12T : 각 테스트 케이스마다 샘플 출력과 같이 12줄씩 출력

 

SAMPLE CODE

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        for (int t = 0; t < T; t++) {
            char ch = sc.next().charAt(0);
            MyCharacter c = new MyCharacter(ch);
            System.out.println(c.charValue());
            System.out.println(c.compareTo(new MyCharacter('i')));
            System.out.println(c.equals(new MyCharacter('i')));
            System.out.println(c.isDigit());
            System.out.println(c.isDigit(ch));
            System.out.println(MyCharacter.isDigit(ch));
            System.out.println(MyCharacter.isLetter(ch));
            System.out.println(MyCharacter.isLetterOrDigit(ch));
            System.out.println(MyCharacter.isLowerCase(ch));
            System.out.println(MyCharacter.isUpperCase(ch));
            System.out.println(MyCharacter.toUpperCase(ch));
            System.out.println(MyCharacter.toLowerCase(ch));
        }
    }
}

YOUR_CODE

 

SAMPLE INPUT

3

1

i

Z

 

SAMPLE OUTPUT

1

-56

false

true

true

true

false

true

false

false

1

1

i

0

true

false

false

false

true

true

true

false

I

i

Z

-15

false

false

false

false

true

true

false

true

Z

z

 

class MyCharacter{
    char c;
    MyCharacter(char ic){
        c = ic;
    }
    public char charValue(){
        return c;
    }
    public int compareTo(MyCharacter t){
        return c - t.c;
    }
    public boolean equals(MyCharacter t){
        return c - t.c == 0 ? true : false;
    }
    public boolean isDigit(){
        return Character.isDigit(c);
    }
    public static boolean isDigit(char t){
        return Character.isDigit(t);
    }
    public static boolean isLetter(char t){
        return Character.isLetter(t);
    }
    public static boolean isLetterOrDigit(char t){
        return Character.isLetter(t) || Character.isDigit(t);
    }
    public static boolean isLowerCase(char t){
        return Character.isLowerCase(t);
    }
    public static boolean isUpperCase(char t){
        return Character.isUpperCase(t);
    }
    public static char toLowerCase(char t){
        return Character.toLowerCase(t);
    }
    public static char toUpperCase(char t){
        return Character.toUpperCase(t);
    }
}

 

 

10.I - 새로운 문자열 나누기

Time Limit: 1s Memory Limit: 128MB

 

DESCRIPTION

String 클래스에 포함된 split 메소드는 구분자로 구분된 문자열의 배열을 리턴하는 함수다. 기본적으로 구분자는 리턴된 배열에 포함되어 있지만 여러분은 구분자도 리턴 배열에 포함하고자 한다. 다음과 같이 정의된 새로운 split 메소드를 만들자. (리턴은 배열로 하지 않고 ,로 구분된 문자열로 한다)

public static String split(String s, String regex)

예를 들어, split("ab#12#453", "#")의 실행 결과는 ab,#,12,#,453 이고, split("a?b?gf#e", "[?#]")의 실행 결과는 a,?,b,?,gf,#,e 이다.

The split method in the String class returns an array of strings consisting of the substrings split by the delimiters. However, the delimiters are not returned. Implement the following new method that returns an array of strings consisting of the substrings split by the matching delimiters, including the matching delimiters.

public static String split(String s, String regex)

For example, split("ab#12#453", "#") returns ab,#,12,#,453 as aString, and split("a?b?gf#e", "[?#]") returns a,?,b,?,gf,#,e as a String.

 

INPUT

* Line 1 : 테스트케이스 T (1~1,000)

* Line 2 ~ T+1 : 문자열 구분자

- 문자열과 구분자는 공백을 포함하지 않으며, 길이가 1000을 넘지 않는다.

구분자의 형식은 아래의 링크를 참조하자.

https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D

 

OUTPUT

* Line 1 ~ T : 각 테스트 케이스마다 ,로 구분된 문자열 출력

 

SAMPLE CODE

import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        for (int t = 0; t < T; t++) {
            String str = sc.next();
            String delimiter = sc.next();
            String tokens = split(str, delimiter);
            System.out.println(tokens);
        }
    }
    YOUR_CODE
}

 

SAMPLE INPUT

5

aabbcc bb

aabbcc aa

aabbcc cc

112233 \d

112233 \d{2}

 

SAMPLE OUTPUT

aa,bb,cc

,aa,bbcc

aabb,cc,

,1,,1,,2,,2,,3,,3,

,11,,22,,33,

 

 public static String split(String str, String d){
        Pattern p = Pattern.compile(d);
        Matcher m = p.matcher(str);
        String ans = "";
        int f = 0;
        while(m.find()){
            if(m.start() == m.end() && m.end() < str.length()){
                ans = ans.concat(str.charAt(m.start())+"");
                f++;
                continue;
            }
            if(f != m.start()){
                ans = ans.concat(str.substring(f, m.start()));
            }
            if(m.start() < str.length())
                ans = ans.concat("," + str.substring(m.start(),m.end()) + ",");
            f = m.end();
        }
 
        if(f != str.length())
            ans = ans.concat(str.substring(f,str.length()));
        return ans;
    }

 

Wrong Answer 0
public static String split(String str, String d){
        Pattern p = Pattern.compile(d);
        Matcher m = p.matcher(str);
        String ans = "";
        int f = 0;
 
        while(m.find()){
            if(ans.length()==0 && m.start() != 0)
                ans = ans.concat(str.substring(0, m.start()));
            ans = ans.concat("," + str.substring(m.start(),m.end()) + ",");
            f = m.end();
        }
        if(f != str.length())
            ans = ans.concat(str.substring(f,str.length()));
        return ans;
    }


public static String split(String str, String d){
        Pattern p = Pattern.compile(d);
        Matcher m = p.matcher(str);
        String ans = "";
        int f = 0;
 
        while(m.find()){
            if(ans.length() == 0 && m.start() != 0)
                ans = ans.concat(str.substring(0, m.start()));
            if(m.start() == m.end() && m.end() < str.length()){
                ans = ans.concat(str.charAt(m.start())+"");
                continue;
            }
            if(m.start() < str.length())
                ans = ans.concat("," + str.substring(m.start(),m.end()) + ",");
            f = m.end();
        }
 
        if(f != str.length())
            ans = ans.concat(str.substring(f,str.length()));
        return ans;
    }
반응형

 

10.J - 3의 배수1

Time Limit: 1s Memory Limit: 128MB

 

DESCRIPTION

주어진 숫자들을 연결하여 가장 크게 만들어 낼 수 있는 3의 배수를 출력하시오. (모든 숫자를 사용해야 함)

항상 답이 존재한다고 가정해도 좋다

 

INPUT

* Line 1 : 테스트케이스 T (1~1,000)

* Line 2 ~ T+1 : 문자열 (공백으로 구분된 0-9 범위의 정수; 정수의 개수는 100개를 넘지 않음)

 

OUTPUT

* Line 1 ~ T : 3의 배수

 

SAMPLE INPUT

1

0 1 2 9 6

 

SAMPLE OUTPUT

96210

 

import java.util.Scanner;
import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n =  input.nextInt(), i, j;
        input.nextLine();
        for(i = 0; i < n; i++) {
            String s = input.nextLine();
            String[] cs = s.split(" ");
            int data[] = new int[cs.length];
            for(j = 0; j < cs.length; j++)
                data[j] = Integer.parseInt(cs[j]);
            System.out.println(find(data));
        }
    }
    public static String find(int[] data){
        String ans = "";
        Arrays.sort(data);
        for(int i = 0; i < data.length;i++)
            ans = ans.concat(Integer.toString(data[data.length - 1 - i]));
        return ans;
    }
}

 

 

10.K - 3의 배수2 (난이도:고급)

Time Limit: 1s Memory Limit: 128MB

 

DESCRIPTION

주어진 숫자들을 조합하여 가장 크게 만들어 낼 수 있는 3의 배수를 출력하시오. (모든 숫자를 사용하지 않아도 됨)

 

INPUT

* Line 1 : 테스트케이스 T (1~1,000)

* Line 2 ~ T+1 : 문자열 (공백으로 구분된 숫자; 숫자의 개수는 100개를 넘지 않음)

 

OUTPUT

* Line 1 ~ T : 3의 배수

- 3의 배수가 없을 경우 0을 출력

 

SAMPLE INPUT

1

0 1 6 7 8

 

SAMPLE OUTPUT

8760

 

import java.util.Scanner;
import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n =  input.nextInt(), i, j;
        input.nextLine();
        for(i = 0; i < n; i++) {
            String s = input.nextLine();
            String[] cs = s.split(" ");
            int data[] = new int[cs.length];
            for(j = 0; j < cs.length; j++) {
                data[j] = Integer.parseInt(cs[j]);
            }
            System.out.println(find(data));
        }
    }
    public static String find(int[] data){
        int i, j, sum = 0, c[] = new int[10];
        String ans = "";
        Arrays.sort(data);
        for(i = 0; i < data.length;i++) {
            sum += data[i];
            c[data[i]]++;
        }
        if(sum % 3 != 0){
            if(sum % 3 == 1){
                if(c[1] > 0)
                    c[1]--;
                else if(c[4] > 0)
                    c[4]--;
                else if(c[7] > 0)
                    c[7]--;
                else if(c[2] + c[5] + c[8] >= 2){
                    for(i = 0; i < 2; i++) {
                        if(c[2] > 0)
                            c[2]--;
                        else if(c[5] > 0)
                            c[5]--;
                        else if(c[8] > 0)
                            c[8]--;
                    }
                }
                else return "0";
            }
            else{
                if(c[2] > 0)
                    c[2]--;
                else if(c[5] > 0)
                    c[5]--;
                else if(c[8] > 0)
                    c[8]--;
                else if(c[1] + c[4] + c[7] >= 2){
                    for(i = 0; i < 2; i++) {
                        if(c[1] > 0)
                            c[1]--;
                        else if(c[4] > 0)
                            c[4]--;
                        else if(c[7] > 0)
                            c[7]--;
                    }
                }
                else return "0";
            }
        }
        if(c[1]+c[2]+c[3]+c[4]+c[5]+c[6]+c[7]+c[8]+c[9]==0)return "0";
        for(i = 9; i >= 0;i--)
            for(j = 0; j < c[i]; j++)
                ans = ans.concat(Integer.toString(i));
        return ans.length() == 0 ? "0" : ans;
    }
}
반응형

댓글