문제

이문제의 포인트는 '문제에서 조어진 조건'이라고 생각한다. 

배열에 수를 넣고 입력받은 우선순위를 토대로 하나라고 높은 문서가 있으면 Queue 가장 뒤에 위치시킨다.

Order는 등수저장 배열, checked는 순위가 입력되었는지에 대한 배열 이러한 것들을 사용하여 문제를 풀었다.

세부내용은 Comment를 추가하였다.

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
import java.util.*;
 
public class Main{
    public static int [] priority;
    public static boolean [] checked;
    public static int [] order;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int number=sc.nextInt();
        for(int i=0;i<number;i++)
        {
            int N=sc.nextInt();
            int M=sc.nextInt();
            priority=new int [N];
            checked=new boolean [N]; 
            order= new int [N];
            Queue <Integer> queue =new LinkedList<Integer>();
            for(int j=0;j<N;j++)
            {
                queue.add(j);
                priority[j]=sc.nextInt();
            }
            
            int ak=1;//처음 시작 
            while(!queue.isEmpty())
            {
                int temp=queue.poll();//뽑아낸다
                int index=0;//처음시작
                boolean check=false;
                while(true)
                {
                    if(index>=N) //escape section
                    {
                        break;
                    }
                    if(index==temp) //같은것끼리 비교할 필요 X
                    {
                        index++;
                        continue;
                    }
                    if(checked[index]) //예제 3번과 같은경우 이미 방문한곳이라면 갈필요 X
                    {
                        index++;
                        continue;
                    }
                    
                    if(priority[temp]<priority[index]) //돌면서 하나라도 크면 조건 2에해당함
                    {
                        queue.add(temp);
                        check=true;
                        break;
                    }
                    index++;
                }
                if(check==false)
                {
                    checked[temp]=true;
                    order[temp]=ak++;
                }
            }
            System.out.println(order[M]);
        }
        
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

 

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

 

1966번: 프린터 큐

문제 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 쌓여서 FIFO - First In First Out - 에 따라 인쇄가 되게 된다. 하지만 상근이는 새로운 프린터기 내부 소프트웨어를 개발하였는데, 이 프린터기는 다음과 같은 조건에 따라 인쇄를 하게 된다. 현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를

www.acmicpc.net

 

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

AC  (0) 2019.07.19
카드2  (0) 2019.07.19
후위 표기식  (0) 2019.07.19
창고 다각형  (0) 2019.07.19
임진왜란  (0) 2019.07.13

문제

이 문제를 푸는데 12번 Attempt할 정도로 많은 시간을 쓴것 같다 .

첫번째 문제를 보았을 때 Queue를 사용하여 그것을 Stack에 쌓으면 뒤집어 지는 형태라고 생각하고 문제를 풀었다.

(안될꺼 알았지만 그냥 함..) 당연히 안들어 갔다.

좀 더 생각해보니 Queue를 굳이 뒤집어야 할 필요가 있나라는 생각을 했고 이를 토대로 index를 지정하여 사용하려고 하였다. 생각을 해보니 Queue는 FIFO성질을 가지고 있어서 한방향에서 밖에 추가하고 빼는것이 가능했다.

이를 해결하기 위해 Deque를 사용하여 양쪽에서 삽입, 삭제가 가능하게 하였다.

이후 계속 시간초과 발생... (이유가 너무 궁금하여 스터디를 같이 하는 먼저푼 분한테 물어봤는데 찾지 못하였음)

Sort를 사용하는 부분에서 시간초과가 발생하는지 알고 직접 다 구현하였지만 여전히 시간초과..

나와같은 문제를 가지고 있는 사람들이 질문한것을 보았더니  BufferedReader을 안써서 시간초과가 발생한거였다..

이후 몇가지 수정사항을 고치고 제출하였다.

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
import java.util.*;
 
public class Main{
    public static boolean check=false;
    public static boolean flag=false;
//    public static Deque<String> queue;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));    
        int number=Integer.parseInt(br.readLine());
        for(int i=0;i<number;i++)
        {
            String temp=br.readLine();
            int len=Integer.parseInt(br.readLine());
            String al=br.readLine();
            String [] str = al.substring(1, al.length()-1).split(",");
            Deque <String>queue  = new ArrayDeque<String>();//dequeue생성
            for(int j=0;j<str.length;j++)//dequeue에 넣어준다 
            {
                if(str[j].equals(""))
                {
                    continue;
                }
                queue.add(str[j]);
            }
            for(int j=0;j<temp.length();j++)
            {
                if(temp.charAt(j)=='R')
                {
                    check=!check; //유동적으로 바뀌여야 되니깐 true --> false, false -->true
                }
                else
                {
                    if(queue.isEmpty())
                    {
                        flag=true;
                        break;
                    }
                    if(check==false)
                    {
                        queue.pollFirst();
                    }
                    else
                    {
                        queue.pollLast();
                    }
                }
            }
            if(flag==true)
            {
                System.out.println("error");
                flag=false;
                check=false;
                continue;
            }
            else
            {
                System.out.print("[");
                int size=queue.size();
                for(int j=0;j<size;j++)
                {
                    if(check==false)
                    {
                        if(queue.size()==1)
                        {
                            System.out.print(queue.peekFirst());
                            queue.pollFirst();
                        }
                        else
                        {
                            System.out.print(queue.peekFirst()+",");
                            queue.pollFirst();
                        }
                    }
                    else
                    {
                        if(queue.size()==1)
                        {
                            System.out.print(queue.peekLast());
                            queue.pollLast();
                        }
                        else
                        {
                            System.out.print(queue.peekLast()+",");
                            queue.pollLast();
                        }
                    }
                }
                System.out.println("]");
                check=false;
                flag=false;
            }
        }
        br.close();
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

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

 

5430번: AC

문제 선영이는 주말에 할 일이 없어서 새로운 언어 AC를 만들었다. AC는 정수 배열에 연산을 하기 위해 만든 언어이다. 이 언어에는 두 가지 함수 R(뒤집기)과 D(버리기)가 있다. 함수 R은 배열에 있는 숫자의 순서를 뒤집는 함수이고, D는 첫 번째 숫자를 버리는 함수이다. 배열이 비어있는데 D를 사용한 경우에는 에러가 발생한다. 함수는 조합해서 한 번에 사용할 수 있다. 예를 들어, "AB"는 A를 수행한 다음에 바로 이어서 B를 수행하는 함수이다.

www.acmicpc.net

 

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

프린터 큐  (0) 2019.07.19
카드2  (0) 2019.07.19
후위 표기식  (0) 2019.07.19
창고 다각형  (0) 2019.07.19
임진왜란  (0) 2019.07.13

문제

이 문제의 포인트는 간단하다. Queue를 사용해 poll()을 해주고 한번 더 poll()한 값을 받아 offer()해주면 끝난다.

 

 

 

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
import java.util.*;
 
public class Main{
    public static long [] arr;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int number=sc.nextInt();
        Queue<Integer> queue = new LinkedList<Integer>();
        
        int count=1;
        for(int i=0;i<number;i++)
        {
            queue.offer(count);
            count++;
        }
        for(int i=0;i<number-1;i++)
        {
            queue.poll();
            int temp=queue.poll();
            queue.offer(temp);
        }
        while(!queue.isEmpty())
        {
            System.out.println(queue.poll());
        }
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

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

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다. 예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234 의 순서로 놓여있다. 1을 버리

www.acmicpc.net

 

 

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

프린터 큐  (0) 2019.07.19
AC  (0) 2019.07.19
후위 표기식  (0) 2019.07.19
창고 다각형  (0) 2019.07.19
임진왜란  (0) 2019.07.13

문제

대학교를 다니면서 자료구조시간, 기사공부를 하면서 다루어 봤던 내용이다.

이 문제에서 키는 우선순위를 설정하는것이다. (이전에 공부했던 내용을 참고하였다)

1. *  &  /

2. + &  -

3. (

문제에서 예제로 제시가 되었던 ()가 있는경우와 없는경우를 나누어서 생각하였다. 연산자가 아닌 피연산자(문자)가 등장했을때는 String에 저장을 하고 연산자가 등장하였을 때 Stack에 Push를 하였다.

상세 내용은 코드부분에서 Comment를 하였다.

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
import java.util.*;
 
public class Main{
    public static boolean flag=false;
    public static int result=0;
    public static int [] arr;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str=sc.next();
 
        Stack<Character> stack = new Stack<Character>();
 
        String result="";
        //스택에 있는 연산자가 더 크거나 같으면 pop push 
 
        for(int i=0;i<str.length();i++)
        {
            if(str.charAt(i)>='A' && str.charAt(i)<='Z')//피연산자는 result에 그냥 더해줌
            {
                result+=str.charAt(i);
            }
            else
            {
                if(str.charAt(i)=='*' || str.charAt(i)=='/'//+ -보다 우선순위가 높은경우, 같은경우 * / 보다 높은경우 없음
                {
                    while(!stack.isEmpty() && (stack.peek() =='*' || stack.peek()=='/')) //Peek을 하였을 때 (가 있다면 push 없으면 peek pop 
                    {
                        result+=stack.peek();
                        stack.pop();
                    }
                    stack.push(str.charAt(i));
                }
                if(str.charAt(i)=='+'||str.charAt(i)=='-')
                {
                    while(!stack.isEmpty() && stack.peek()!='(')  //( 아닐때 까지 돈다  + - 
                    {
                        result+=stack.peek();
                        stack.pop();
                    }
                    stack.push(str.charAt(i));
                }
                if(str.charAt(i)=='(')//여는 괄호는 그냥 스택에 push 해준다.
                {
                    stack.push(str.charAt(i));
                }
                if(str.charAt(i)==')')
                {
                    while(!stack.isEmpty() && stack.peek()!='('//여기에 if아니잖아...
                    {
                        result+=stack.peek();
                        stack.pop();
                    }
                    stack.pop(); //여기 없으면 ( 계속 존재 무조건 pop해줘야함 
                }
            }
        }
        while(!stack.isEmpty())
        {
            result+=stack.peek();
            stack.pop();
        }
        System.out.println(result);
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

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

 

1918번: 후위 표기식

첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 A~Z의 문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 수식은 주어지지 않는다. 표기식은 알파벳 대문자와 +, -, *, /, (, )로만 이루어져 있으며, 길이는 100을 넘지 않는다. 

www.acmicpc.net

 

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

AC  (0) 2019.07.19
카드2  (0) 2019.07.19
창고 다각형  (0) 2019.07.19
임진왜란  (0) 2019.07.13
수학숙제  (0) 2019.07.13

문제

이문제를 처음 봤을때 매우 어렵게 느껴졌다. 이후 여러 그림을 그리면서 문제의 방향성을 찾은것 같다.

(그림으로 그리면 이해 하기 훨씬 쉬운것 같다.)

index의 최저점 최고점을 알고 Max Height를 갱신해가는 방식으로 문제를 접근하였다 위 그림의 첫번째 그림처럼 부분을 빼주면 우리가 원하는 그림을 얻을 수 있다. 부분을 빼는 방법은 가장 끝의 index에서 이전에 갱신한 최대값을 만날때 까지 가는데  이 문제에는 조건이 존재하는데 물이 고이는 부분이 없어야한다(구덩이). 이 조건은 두번째 그림을 보면 이해 할 수 있다. 구덩이가 생기는 조건은 MaxIndex에서 이동하면서 그 값이 변동될때 즉, 큰 값이 등장할 때 그 값을 갱신해주고 더해주면 첫번째 구했던 면적 - 두번째 구했던 면적 을 구해주면 문제에서 원하는 가장 작은 면적을 구할 수 있다.

 

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
import java.util.*;
 
public class Main{
    public static int result=0;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int number=sc.nextInt();
        int [] arr = new int [1001];//N이 1000이하 
        int minIndex=Integer.MAX_VALUE;
        int maxIndex=Integer.MIN_VALUE;
        for(int i=0;i<number;i++)
        {
            int index=sc.nextInt();
            int height=sc.nextInt();
            arr[index]=height;
            if(index>maxIndex)
            {
                maxIndex=index;
            }
            if(index<minIndex)
            {
                minIndex=index;
            }
        }
        int location=arr[minIndex];
        for(int i=minIndex;i<=maxIndex;i++)
        {
            if(location<arr[i])
            {
                location=arr[i];
            }
            result+=location;
        }
        if(location>arr[maxIndex])
        {
            int al=maxIndex;
            while(true)
            {
                if(location==arr[al]) //10을 만날때 stop!
                {
                    break;
                }
                else
                {
                    if(arr[al]>arr[maxIndex]) //웅덩이 방지 !!
                    {
                        result-=(location-arr[al]);
                        arr[maxIndex]=arr[al];
                    }
                    else // 10 10 10 10에서 남는 곳만큼 빼야한다
                    {
                        result-=(location-arr[maxIndex]);
                    }
                }
                al--;
            }
        }
        System.out.println(result);
    }
}
 
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

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

 

2304번: 창고 다각형

첫 줄에는 기둥의 개수를 나타내는 정수 N이 주어진다. N은 1 이상 1,000 이하이다. 그 다음 N 개의 줄에는 각 줄에 각 기둥의 왼쪽 면의 위치를 나타내는 정수 L과 높이를 나타내는 정수 H가 한 개의 빈 칸을 사이에 두고 주어진다. L과 H는 둘 다 1 이상 1,000 이하이다.

www.acmicpc.net

 

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

카드2  (0) 2019.07.19
후위 표기식  (0) 2019.07.19
임진왜란  (0) 2019.07.13
수학숙제  (0) 2019.07.13
퍼거슨과 사과  (0) 2019.07.08

문제

이문제의 포인트는 상태값 비교하기로 말할 수 있을 것 같다.

처음 올바른 순서, 즉 답을 기입하는 순서대로 value값을 주면서 +1씩 시킨다. 그리고 내가 생각하는 답이 들어올때 문자열이 같을 시 해당되는 value를 집어 넣어주고 이후 비교하여 오름차순에서 어긋날시에는 점수에 포함하지 않는다.

 

 

 

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
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();
        int [] studentNumber= new int[number];
        int [] answerNumber = new int [number];
        String [] student = new String [number];
        String [] answer = new String [number];
        int total=number*(number-1)/2;
        int value=1;
        int point=0;
        for(int i=0;i<number;i++)
        {
            answer[i]=sc.next();
            answerNumber[i]=value;
            value++;
        }
        for(int i=0;i<number;i++)
        {
            student[i]=sc.next();
        }
        //맞는 value값 집어넣
        for(int i=0;i<number;i++)
        {
            for(int j=0;j<number;j++)
            {
                if(student[i].equals(answer[j]))
                {
                    studentNumber[i]=answerNumber[j];
                }
            }
        }
        for(int i=0;i<number-1;i++)
        {
            for(int j=i;j<number;j++)
            {
                if(studentNumber[i]<studentNumber[j])
                {
                    point++;
                }
            }
        }
        System.out.println(point+"/"+total);
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

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

 

3077번: 임진왜란

문제 현우는 방금 선생님으로부터 역사 시험 결과를 받았다. 현우가 가장 열심히 공부한 문제는 임진왜란의 해전을 일어난 순서대로 적는 문제이다. 올바른 순서는 다음과 같다. 1. 옥포 해전    2. 사천 해전    3. 한산도 대첩    4. 명량 해전    5. 노량 해전 현우는 정말 열심히 공부했고, 옥포 해전을 제외한 모든 해전의 날짜를 외웠다. 따라서, 현우는 옥포 해전이 가장 먼저 일어난 해전인지 마지막에 일어난 해전인지 생각해내지 못했고, 다음

www.acmicpc.net

 

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

후위 표기식  (0) 2019.07.19
창고 다각형  (0) 2019.07.19
수학숙제  (0) 2019.07.13
퍼거슨과 사과  (0) 2019.07.08
창영이의 일기장  (0) 2019.07.08

문제

수학숙제

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

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

문제

이 문제의 포인트는 빨간사과와 초록사과를 모두에게 똑같이 주고 남으면 안된다라는 조건이다.  이 조건을 생각하면서 코드를 구현하는데 어렵지 않았다.

 

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
import java.util.*;
 
public class Main{
 
    public static void main(String[] args) {
        Scanner sc= new Scanner(System.in);
        int number1=sc.nextInt();
        int number2=sc.nextInt();
        int count=1;
        int temp=Math.min(number1, number2); //입력예제 생각하여 4 8 이면 4개 이상 배급 앞사과는 4개이상 배부 ㅜㄹ가 
        int al=0;
        while(true)
        {
            if(count>temp)
            {
                break;
            }
            if(number1%count==0 && number2%count==0)//똑같이 나누어 졌을때 
            {
                System.out.println(count+" "+number1/count+" "+number2/count);
            }
            count++;
        }
    }
}
 
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

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

 

2942번: 퍼거슨과 사과

문제 맨체스터 유나이티드의 감독 퍼거슨은 빨간 사과를 R개, 초록 사과를 G개 가지고 있다. 훈련장에 있는 선수들 중 몇 명에게 나누어 주려고 한다. 단, 선수들이 서로 같은 개수의 사과를 받지 못하면 경기력 저하가 나타날 수 있으므로 모든 선수에게 같은 개수를 주려고 한다. 퍼거슨 감독은 사과를 싫어한다. 따라서 사과가 남으면 안 된다. 예를 들어, 퍼거슨이 빨간 사과를 4개, 초록 사과를 8개 가지고 있다면, 다음과 같이 세가지 방법으로 나누어 줄 수

www.acmicpc.net

 

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

임진왜란  (0) 2019.07.13
수학숙제  (0) 2019.07.13
창영이의 일기장  (0) 2019.07.08
찍기  (0) 2019.07.08
2009년  (0) 2019.07.08

+ Recent posts