자바 초급문제로 맨땅에 해딩하기

자바 초급문제 2. 완주하지 못한 선수

Jungsoomin :) 2020. 3. 24. 02:23

프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/42576)

자바 +  초급문제의 완주하지 못한 선수 이다.

 

내용: 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

 

1일에 4h씩 2일 정도 씨름하다 겨우 해답에 가까워져 해결한 문제이다. 결국 얻은 답은 심플하게 생각하는게 가장 좋다는 것이더라.

 

처음에 구상해서 만들어 본 소스다. 선수들의 이름을 직접받아 그 내용을 배열에 저장시키고 보는 사람이 편하게끔 또다시 보여주려 했지만 한계에 봉착했다. 이후에 같은 내용으로 완주자 값을 받아 행렬을 비교해서 리턴 값을 만들고 싶었으나 그게 자신의 실력으로는 어렵다고 판단했다.

 

그래서 완전히 갈아 엎고 새로 시작해보기로 결심했다. 핵심적인 내용만 다루기로 노선을 변경한 것이다.

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
package 완주하지못한선수;
 
import java.util.Arrays;
import java.util.Scanner;
 
public class example {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        int a =0;//names[a]를 위한 저장변수
        
        
        String c = "done";//for문을 종료시킬 문자열
        
        String[] names = new String [10000000] ;//선수들의 이름을 담을 배열
        int i = names.length;// 배열의 길이를 담을 인트변수
        
        Scanner sc = new Scanner(System.in);
        // sc 선언 및 입력값 대입 및 초기화 
        
        //for 문의 시작 및 탈출점
        Outter: for( a=0; a<i; a++) {
            System.out.println("이름을 입력해주세요." );
            names[a] = sc.next();
        /*키워드가 입력될 때까지 계속 정보를 입력시키게끔함
         * 
         */
            if( names[a].equals(c)) {
                i = a;
        // 입력된 배열만큼 i의 배열이 맞춰지도록 설정
        //for문 탈출 및 done 이라는 키워드입력을 받기위함.
                break Outter;
            }
        }// for 문 탈출
        
        for( a=0; a<i; a++ ) {                    
        /*
         * 사용자가 타이핑 한 내용을 안내해주고 싶었음.
         */
            System.out.print(names[a] + " ");
        }
        
        
        //System.out.println(Arrays.toString(names));
            
        
        
        }
    }
 
cs

 

 

 

참가자와 완주자의 수가 1차이가 난다는 점에 포인트를 잡기로 했다. 입력자의 편의를 진정으로 살리려면 하나의 이름이아니라 명단을 받게끔 만들어야한다고 생각했고, 오차가 없게끔 그 명단을 정렬하고 비교를 하고 싶었으며

비교 과정에서 완주자 명단과 참가자 명단의 다른 내용이 나온다면 그 값을 리턴시키기로 한 것이다. 아직까지 맞는 지도 잘 모르겠다.  개인적으로 for문이 종료됬을 때에 마지막 인덱스에 미완주자의 이름이 있다면 어떻게하지...? 라고 생각했다. 그래도 테스트 결과 문제는 없는데...더 알아봐야겠다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package 완주하지못한선수;
import java.util.*;
public class Solution {
    
        public String solution(String[] participant, String[] completion) {
                        //참가자와 완주자를 저장할 수 있게 설정.
            Arrays.sort(participant);
            Arrays.sort(completion);
            //참가자와 완주자의 비교를 위해 정렬시킴
            int a = 0;
            //비교를 위한 인트 변수 i 선언
                for(a=0; a<completion.length; a++) {
                    //완주자의 인덱스 수만큼 a를 증가시킴
                    if(!participant[a].equals(completion[a])) {
                        //그 중에 참가자와 완주자의 비교 값이 같지않을 경우를 가정
                        return participant[a];
                        //바로 그 참가자를 리턴시킴
                    }
                }
                return participant[a];
            
        }
 
}
cs

 

 

 

1. import java.util.*;

자바.util의 모든 클래스를 임포트 해준다는 뜻이라고 한다.

 

2.Arrays.sort();

괄호의 배열을 sort=정렬시켜준다.

 

3.! A.equals(B) 

메소드이며 객체끼리 내용을 비교해 줌.

 

4.return

메소드를 종료하거나 값을 반환시키는 역할을 한다.

 

5.변수[]

[]만큼 해당 타입의 자료를 인덱스에 넣어준다.

 

2일 동안의 씨름이 끝이났다.  많이 아쉽지만 그래도 만족한다. 처음으로 정답에 다가가본 것 같다.

뿌듯하다. 어느새 새벽 3시에 다가간다.

 

 

하지만 사용한 것들이 맞는 사용법이 아니거나 정확한 개념이 아닐 수도 있다. 더더 보완해야한다 :) 힘내라.