문제

수학숙제

이문제의 포인트를 일단 아는것이 중요하다고 생각한다. 나는 이 포인트를 크게 이렇게 생각하였다.

1. 숫자 문자가 나올시 부터 빈 String에 저장하여 알파벳 문자가 나올시 저장을 멈춘다.

2. 숫자의 길이를 가지고 정렬을 한다. (길이가 같을 시에는 숫자 자리수에 대해서 비교하여 큼,작음을 판별한다.)

예외! 001과 같은 경우에 1이 저장되어야하고 000일때는 0이 저장되어야한다!

이전에는 library에서 제공하는 sort를 사용했었는데 이번에는 integer값에 넘기때문에 숫자로 변환하여 비교는 큰 의미가 없다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
import java.util.*;
 
public class Main{
    public static boolean flag=false;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int number=sc.nextInt();
        String arr [] = new String[10000];
        int count=0;
        for(int i=0;i<number;i++)
        {
            String temp=sc.next();
            String al="";
            if(temp.charAt(0)>='a' && temp.charAt(0)<='z')
            {
                flag=true;
            }
            for(int j=0;j<temp.length();j++)
            {
                if(temp.charAt(j)>='0' && temp.charAt(j)<='9')
                {
                    flag=false;
                }
                if(temp.charAt(j)>='0' && temp.charAt(j)<='9'&&flag==false)
                {
                    al+=temp.charAt(j);
                }
                else if(temp.charAt(j)>='a' && temp.charAt(j)<='z'&&flag==false)
                {
                    arr[count]=al;
                    al="";
                    flag=true;
                    count++;
                }
                if(flag==false &&j==temp.length()-1)
                {
                    arr[count]=al;
                    count++;
                    flag=true;
                    al="";
                }
            }
            if(flag==false)
            {
                arr[count]=al;
                count++;
                al="";
            }
            flag=false;
        }
        if(count==0)
        {
            return;
        }
        //앞에 0제거 해주는
        int zeroCount=0;
        boolean check=false;
        for(int i=0;i<count;i++)
        {
            if(arr[i].length()>1 &&arr[i].charAt(0)=='0')
            {
                String temp="";
                for(int j=0;j<arr[i].length();j++)
                {
                    if(check==true)
                    {
                        temp+=arr[i].charAt(j);
                        continue;
                    }
                    if(arr[i].charAt(j)=='0')
                    {
                        zeroCount++;
                        continue;
                    }
                    else
                    {
                        temp+=arr[i].charAt(j);
                        check=true;
                    }
                }
                if(arr[i].length()==zeroCount)
                {
                    temp="0";
                }
                arr[i]=temp;
                check=false;
                zeroCount=0;
                temp="";
            }
        }
        
        boolean qp=false;
        for(int i=0;i<count-1;i++)
        {
            for(int j=i+1;j<count;j++)
            {
                if(arr[i].length()>arr[j].length())
                {
                    String temp=arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                }
                if(arr[i].length()==arr[j].length())
                {
                    for(int k=0;k<arr[i].length();k++)
                    {
                        if(((int)arr[i].charAt(k))>((int)arr[j].charAt(k)))
                        {
                            qp=true;
                        }
                        if(((int)arr[i].charAt(k))<((int)arr[j].charAt(k)))
                        {
                            break;
                        }
                        if(qp==true)
                        {
                            String temp=arr[i];
                            arr[i]=arr[j];
                            arr[j]=temp;
                            qp=false;
                            break;
                        }
                    }
                }
            }
        }
        for(int i=0;i<count;i++)
        {
            System.out.println(arr[i]);
        }
    }
 
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

https://www.acmicpc.net/problem/2870

 

2870번: 수학숙제

문제 상근이는 수학시간에 딴 짓을 하다가 선생님께 걸렸다. 선생님은 상근이에게 이번 주말동안 반성하라며 엄청난 숙제를 내주었다. 선생님이 상근이에게 준 종이에는 숫자와 알파벳 소문자로 되어있는 글자가 N줄있다. 상근이는 여기서 숫자를 모두 찾은 뒤, 이 숫자를 비내림차순으로 정리해야한다. 숫자의 앞에 0이 있는 경우에는 정리하면서 생략할 수 있다. 글자를 살펴보다가 숫자가 나오는 경우에는, 가능한 가장 큰 숫자를 찾아야 한다. 즉, 모든 숫자의 앞과 뒤에

www.acmicpc.net

 

 

'알고리즘 > 문제' 카테고리의 다른 글

창고 다각형  (0) 2019.07.19
임진왜란  (0) 2019.07.13
퍼거슨과 사과  (0) 2019.07.08
창영이의 일기장  (0) 2019.07.08
찍기  (0) 2019.07.08

+ Recent posts