반응형

프로그래머스 코딩테스트 가운데글자가져오기 링크 : 여기를 눌러주세요.

프로그래머스에 있는 코딩테스트 가운데글자가져오기 라는 제목의 문제입니다.

프로그래머스 코딩테스트 JAVA 레벨 1에 있는 ‘가운데글자가져오기’ 문제입니다.


코딩테스트 가운데글자가져오기 어떻게 풀지 생각해보기

이 문제를 보자마자 들었던 생각이

'아! 글자들을 자른뒤에 남은 글자를 return 해주면 될 것 같았습니다'

반복문속에 넣어서 글자들의 길이가 2보다 크다면,

맨앞과 맨뒤 글자를 자르고 다시 반복문 속에들어와

2보다 크다면 위 행동을 반복하고 2와 같다면 2글자를 리턴,

2보다 작다면 그 글자를 리턴 해주면 될 것같습니다!

잘라줄때 String을 사용하지않고 StringBuffer을 사용했습니다.

굳이 StringBuffer을 선언하지않고 String만으로도 문제풀이는 가능합니다.

저도 제가 왜 StringBuffer을 썼는지 모르겠네요...

이번문제는 생각보다 간단하게 풀 수 있었습니다.

(쉬워서 그런지 프로그래머스 1점오르더라구요...)


코딩테스트 통과한 소스보기

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
public class Solution {
    @Test
    public void test() {
        assertEquals(Solution.solution("123"), "2");
    }
    public static String solution(String str) {
        String answer = "";
        StringBuffer cutStr = new StringBuffer();
        cutStr.append(str);
        for(int i =0; i<str.length()/2; i++) { //2번 돈다.
//                System.out.printf("%d회\n",i);
            if(cutStr.length()>2) {
                cutStr = cutStr.deleteCharAt(0);
                cutStr = cutStr.deleteCharAt
                        (cutStr.length()-1);
            }else if(cutStr.length()==2){
                break;
            }
        }
        answer = cutStr.toString();
//            System.out.println(cutStr);
        return answer;
    }
}
 

조금이라도 효율성을 높이고자 반복문 속에 조건을 str.length/2를 해주었습니다.

나중에 다른분들의 소스코드를 보고 알았지만

꼭 반복문을 사용하지않아도 문제해결이 가능합니다.

혹시라도 이 글을 미리 보시고 아직 정답을 제출하지 않으신 분들이 있다면

반복문을 사용하지 않고 문제해결하는 방법을 생각해보는것도 좋을 것 같습니다.

(저도 보자마자 아..? 했네요 ㅋㅋㅋ)

모든 코드에는 정답이 없으며 저 또한 코드를 잘 짜는게 아니기 때문에

제 코드는 참고용으로만 사용해주시면 감사하겠습니다.

최대한 매일매일 1개의 코딩테스트 문제를 풀려고 노력중입니다.

아직 많이 부족해서 포스팅이 늦을 수 있으니 양해 부탁드립니다.

조언이나 가르침은 항상 기쁜마음으로 받겠습니다.

감사합니다 (_ _)

반응형
반응형

프로그래머스 코딩테스트 2016년 링크 : 여기를 눌러주세요

프로그래머스에 있는 코딩테스트 2016년 이라는 제목의 문제입니다.

프로그래머스 코딩테스트 JAVA 레벨 1에 있는 ‘2016년’ 문제입니다.


코딩테스트 2016년 문제 이해하기

2016년 1월 1일은 금요일이고,

파라미터로 int a (월) , int b(일) 을 전달했을때 무슨요일인지를

String으로 리턴해주는 문제입니다.

제한조건에는 2016 년도는 윤년이라고 적혀있습니다.

윤년이란?

간단하게 말해서 2월이 28일까지가 아닌 29일까지인 년을 말합니다.

자세한 사항은

여기를 클릭해주세요

기본적으로 매월의 일수와, 답으로 제출할 String을 배열로 선언해주도록 하겠습니다.

마지막 int calc는 추후 계산을 위해 선언해줬습니다.

이제부터는 그냥 차근차근 하나씩 풀어나가면 될 것같습니다.

1
2
3
4
5
6
7
8
9
public static String solution(int a, int b) {
        String answer = "THU";
        int[] days = {31,29,31,30,31,30,31,
                     31,30,31,30,31};
        String[] date = {"FRI","SAT","SUN",
                        "MON","TUE","WED","THU"};
        int calc = 0;
}
        

코딩테스트 2016년 이렇게 푸시면 됩니다

우선적으로 전달인자 a를 받아왔을때 a월 이전의 일수들과 b을 더해줍니다.

(Ex. a=2월 b=2일 일때, 1월의 31일과 b의 1일을 계산합니다)

계산한 값들을 %7로 다시 계산한 뒤, 나오는 숫자를

date배열에 넣어줍니다.

아래는 테스트 통과한 코드를 넣어두겠습니다.

감사합니다.


코딩테스트 통과한 코드 보기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static String solution(int a, int b) {
        String answer = "THU";
        int[] days = {31,29,31,30,31,30,31,
                     31,30,31,30,31};
        String[] date = {"FRI","SAT","SUN",
                        "MON","TUE","WED","THU"};
        int calc = 0;
        if(a>0) {            
            for(int i=0 ; i < a-1; i++) {
                calc += days[i];
            }
        }
        calc += (b-1);
        answer = date[(calc%7)];
        return answer;
}

모든 코드에는 정답이 없으며 저 또한 코드를 잘 짜는게 아니기 때문에

제 코드는 참고용으로만 사용해주시면 감사하겠습니다.

최대한 매일매일 1개의 코딩테스트 문제를 풀려고 노력중입니다.

아직 많이 부족해서 포스팅이 늦을 수 있으니 양해 부탁드립니다.

조언이나 가르침은 항상 기쁜마음으로 받겠습니다.

감사합니다 (_ _)

반응형
반응형

프로그래머스 코딩테스트 문제풀이 “모의고사” 링크 : 여기를 클릭해 주세요.

프로그래머스 코딩테스트 JAVA 레벨 1에 있는 ‘모의고사’ 문제입니다.


코딩테스트 [모의고사] 문제 이해하기

수포자 1은 1,2,3,4,5 를 반복해서 정답을 제출하고

수포자 2는 2,1,2,3,2,4,2,5를 반복해서 정답을 제출하고

수포자 3은 3,3,1,1,2,2,4,4,5,5를 반복해서 정답을 제출한다고 합니다.

문제의 정답들을 받아서 가장 많이 맞추는 사람을 return 해주는 문제인데요.

시험은 최대 10,000문제로 구성되어 있다고합니다.

그말은 시험이 몇문제인지 알 수 없기때문에 저희는 수포자들의

정답을 계속 반복시켜야 한다는것을 알 수 있습니다.

또한 정답을 배열로 받아서 배열로 가장 많이 맞춘 수포자를 리턴해줘야합니다.

(높은 점수를 사람이 여럿일 경우 오름차순으로 정렬도 하라고합니다.)

그렇다면 기본적인 Class를 생성하고 하나씩 풀어가보도록 하겠습니다.




1

2

3

4

5

6

7

8

9

10

11

12

13

14


public class Solution {

    public static int[] solution(int[] answers) {

        //수포자들을 각각 a,b,c로 선언하고

        //그들이 적을 답들을 배열로 넣었습니다.

        int[] a = {1,2,3,4,5};

        int[] b = {2123242521232425};

        int[] c = {33112244553311224455};

        //각각의 수포자들의 점수를 세어주기위해 각각 변수도 선언합니다.

        int acnt = 0;

        int bcnt = 0;

        int ccnt = 0;

    }

}

 



1

2

3

4

5

6

7

8

9

10

11


for(int i=0; i<answers.length; i++) {

    if(answers[i%answers.length== a[i%a.length]) {

        acnt++;

    } 

    if(answers[i%answers.length== b[i%b.length]) {

        bcnt++;

    }

    if(answers[i%answers.length== c[i%c.length]) {

        ccnt++;

    }

}
   

이렇게 각각의 수포자들이 적을 정답들을 실제 answers의 길이만큼 반복시킵니다. 그리고 정답들이 맞을때마다 각수포자들의 cnt를 1씩 늘려줍니다.

여기까지 했다면 각각의 수포자들이 몇개를 맞췄는지 알 수 있습니다.

이제 그 들중 가장 많이 맞춘 사람을 찾아 내면 될 것 같습니다.




1


int max = Math.max(acnt , Math.max(bcnt, ccnt));

이렇게 가장 많이 맞춘사람의 갯수를 max라는 변수에 담아준 뒤,




1

2

3

4

5

6

7

8

9

10

11

12

13

14


List<Integer> preAns = new ArrayList<Integer>();

        if(max == acnt) {

            preAns.add(1);

        }

        if(max == bcnt) {

            preAns.add(2);

        }

        if(max == ccnt) {

            preAns.add(3);

        }

        int[] answer = new int[preAns.size()];

        for(int i=0; i<preAns.size(); i++) {

            answer[i] = preAns.get(i);

}

ArrayList를 만들어 준 뒤, 각각의 cnt들을 max와 비교해 주고 list에 넣어줍니다.

마지막으로 저희는 배열로 정답을 return 해줘야하기때문에

list에 넣은 값들을 배열 answer에 넣어주면 끝이 납니다.





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


public class Solution {

    @Test

    public void test() {

        assertArrayEquals(Solution.solution(new int[] {1,2,3,4,5}), new int[] {1});

        assertArrayEquals(Solution.solution(new int[] {1,3,2,4,2}), new int[] {1,2,3});

    }

    public static int[] solution(int[] answers) {

        int[] a = {1,2,3,4,5};

        int[] b = {2123242521232425};

        int[] c = {33112244553311224455};

        int acnt = 0;

        int bcnt = 0;

        int ccnt = 0;

        

        for(int i=0; i<answers.length; i++) {

            if(answers[i%answers.length== a[i%a.length]) {

                acnt++;

            }

            if(answers[i%answers.length== b[i%b.length]) {

                bcnt++;

            }

            if(answers[i%answers.length== c[i%c.length]) {

                ccnt++;

            }

        }

        int max = Math.max(acnt , Math.max(bcnt, ccnt));

        List<Integer> preAns = new ArrayList<Integer>();

        if(max == acnt) {

            preAns.add(1);

        }

        if(max == bcnt) {

            preAns.add(2);

        }

        if(max == ccnt) {

            preAns.add(3);

        }

        int[] answer = new int[preAns.size()];

        for(int i=0; i<preAns.size(); i++) {

            answer[i] = preAns.get(i);

        }

        

        

        return answer;

    }

}

 
반응형
반응형

 

1. 스크립트 언어의 정의

Script 언어는 연극 용어인 Script에서 유래되었습니다.

우리는 프로그래밍에서 'script'의 역할을 생각해보면 왜 연극 용어에서 가지고 왔는지

이해할 수 있습니다.

프로그래밍에서의 스크립트 언어는 기존에 이미 존재하는 소프트웨어를 제어하기 위한

용도로 쓰이는 언어입니다.

 

연극에서 스크립트가 배우가 어떻게 행동할지, 어떻게 말을 할지 등을 지시해 놓은 것처럼,

스크립트 언어도 응용 소프트웨어를 제어하는 컴퓨터 프로그래밍 언어입니다.

 

연극의 스크립트를 보고 싶으시다면 클릭해 주세요.

 

 

 

2. JavaScript?

자바스크립트(JavaScript)는 객체 기반의 스크립트 언어입니다.

(※ 객체 : 메모리에 할당된 것으로 프로그램에서 사용되는 데이터 / 변수, 함수, 메서드 등이 될 수 있습니다.)

우리는 HTML로 웹의 내용을 작성하고, CSS로 작성한 웹의 내용을 꾸며주고, 그리고 JS(자바스크립트)로 

웹의 동작을 구현합니다.

 

 

3. JavaScript 특징

  1. 자바스크립트는 타입을 명시할 필요가 없는 인터프리터 언어입니다.
  2. 자바스크립트는 객체 지향형 프로그래밍함수형 프로그래밍을 모두 표현할 수 있습니다.
더보기

객체지향 프로그래밍

객체지향 프로그래밍은 컴퓨터 프로그래밍을 명령어의 목록으로 보는 시각으로 보는 것이 아닌,

여러 개의 독립된 객체들의 모임으로 파악하고자 하는 것입니다.

 


함수형 프로그래밍

순수 함수를 조합하고 소프트웨어를 만드는 방식입니다.

 


    3-1 인터프리터?

  • 인터프리터(interpreter)는 소스코드를 바로 실행하는 컴퓨터 프로그램, 환경을 말합니다.
  • 원시 코드를 기계어로 번역하는 컴파일러와 대비됩니다.

프로그램 언어를 해석하고 실행시키는 대표적인 방법으로는

 

컴파일(Compile)과 인터 프릿(Interpret) 방식이 있습니다.

 

컴파일 인터프릿
프로그래밍 언어를 기계어로 해석하는 작업 방식입니다. 한번에 한줄씩 읽어서 해석하며 프로그램을 구동시킵니다.
실행은 인터프리터를 이용해 실행시키는 것 보다 빠르게 실행됩니다.
컴파일 과정은 만약 원시 프로그램의 크기가 크다면 상당한 시간이 걸릴 수 있습니다.
직접 코드를 구동시키는 특징이 있기때문에 실제 실행시간은 느리며, 대신 실시간으로 디버깅이나 코드수정이 가능합니다.
인터프리터는 고급 프로그램을 즉시 실행시킬 수 있습니다.

 

실행 과정으로 알아보겠습니다.

컴파일 인터프릿
1.어휘 분석 1. 한 명령어를 메모리에서 가져온다.
2.구문 분석 2. 가져온 명령어를 해석한다.
3.중간 코드 생성 3. 필요한 데이터를 가져온다.
4.최적화 4. 명령을 실행한다.
5.코드 생성  

 

더보기

1. 어휘 분석 

  • 원시 코드를 토큰으로 나눕니다.

2. 구문 분석

  • 토큰이 문법적으로 옳은가를 검사합니다. 
  • 오류가 없다면 구문 트리를 생성합니다.

3. 중간 코드 생성

  • 기계어는 아니지만 기계어에 가까운 중간 코드로 된 프로그램을 생성합니다.
  • 이 과정에서는 문법적인 error 가 아니라 의미적인 error를 검사합니다..

4. 최적화

  • 중간코드를 조금 더 효율적으로 개선합니다.
  • 크기를 낮추고 실행 속도를 올려줍니다.

5. 코드 생성 

  • 목적 프로그램을 생성합니다.
반응형
반응형

1. 프레임워크

 

자바스크립트 프레임워크에 대해 알아보기 위해서는 일단 프레임워크가 어떤 것인지를 알아야 합니다.

프레임워크는 복잡한 코드나 내용을 간단하게 해 주며 미리 규격화, 모듈화 되어있는 도구를 말합니다.

조금 더 쉽게 설명을 드리 자면 FrameWork는 Frame + Work로 볼 수 있습니다.

Frame = 틀 , Work = 일하다.

프레임워크는 짜인 틀 안에서, 또는 틀을 가지고 일한다 라는 느낌으로 생각해보시면 될 것 같습니다.

 

예를 들어 설명드리겠습니다.

우리에게는 장난감 퍼즐이 있다고 가정하겠습니다.

이미지 출처 : https://bizkhan.tistory.com/3007

우리는 각각의 퍼즐들을 가지고 알맞게 조립하면서 결과물을 만들어 내야 할 것입니다.

또한 이 퍼즐을 완성하기 위해서는 각각 퍼즐이 가지고 있는 모양이나 구멍에 규약을 지키면서 만들어 가야 합니다.

 

이러한 개념을 우리는 프로그래밍에 관련지어 생각해 보도록 하겠습니다.

프레임워크는

어떠한 프로그램을 쉽게 만들기 위한 요소와 룰을 제공하는 프로그램으로 이야기할 수 있습니다.

 

2. 자바스크립트 프레임워크

 

자바스크립트가 처음 개발돼 고난 뒤 사람들은 웹의 동작을 구현해주는 자바스크립트에 열광했습니다.

그러나 자바스크립트의 유연함 때문인지 코드가 조금씩 복잡해지기 시작했고 이는 유지보수에 악영향을 미쳤습니다.

그렇게 자바스크립트의 인기가 식어가던 도중 이 문제점을 해결해주는 프레임워크들이 하나둘씩 생기기 시작했습니다. 2019년도를 기준으로 한 Front-end Frameworks 순위입니다.

출처 : https://risingstars.js.org/2019/en

2018년도와는 다르게 Svelte가 Angular를 제치고 3위로 올랐습니다. 

2018년도까지는 JS프레임워크 3 대장이 Vue, React, Angular 였는데 이제는 4 대장이 되려는 걸까요..?

 

Vue.js

Vue.js는 MVVM 패턴의 뷰 모델에 해당하는 화면단 프레임워크입니다.

MVVM

MVVM패턴은 Model - View - ViewModel패턴의 약자입니다.
Model - View - ViewModel로 구조화하여 개발하는 방식으로 유지보수가 편리합니다.

View(뷰) : 사용자가 보는 UI 부분입니다.
ViewModel(뷰 모델) : View를 표현하기 위해 만든 Model입니다. 돔 리스너와 데이터 바인딩을 제공합니다.
Model(모델): 애플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분입니다.

돔 리스너 

돔이 변경되면 즉각적으로 반응하여 특정 로직을 수행합니다.


일단 DOM이 변경되면 DOM리스너가 감지한 뒤, 모델에 접근하여 데이터를 바인딩하고 그것을
뷰에 출력하게 됩니다.

데이터 바인딩과 화면 단위를 component 형태로 제공하며, 관련 API를 지원하는 데에 궁극적인 목표가 있습니다.

Angular에서 지원하는 양방향 데이터 바인딩을 동일하게 제공합니다.

컴포넌트끼리의 통신의 기본은 React의 단방향 데이터 흐름을 사용합니다.

다른 프레임워크와 비교했을 때, 가볍고 빠르며 문법이 단순하고 간결하여 누구나 쉽게 접근이 가능합니다.

Svelte

Svelte는 다른 프레임워크와는 매우 다릅니다.

Svelte는 프레임워크라기보다는 빌드 시에 모든 것을 구축하는 컴파일러와 같습니다.

React와 Vue와 마찬가지로, 데이터가 변경될 때 화면을 갱신하는 응용프로그램을 개발자가 작성할 수 있습니다. 그러나 가장 큰 차이점은 프레임워크가 브라우저에서 실행되는 것이 아닌, 컴파일 시에 실행됩니다.

컴파일러는 개발자가 만든 구성요소에서 DOM을 직접 제어하는 명령형 코드로 변환합니다.

따라서 브라우저에 전달된 코드는 적어지고 효율적으로 변화며 빠르게 실행됩니다.

Svelte가 벌써 3대 장안에 들어간다고 하기는 시기상조이지만 2020년에는 어느 정도 따라올 가치가 있습니다.

반응형
반응형

ASP.NET 이란?

ASP.NET은 마이크로소프트사가 개발한 동적인 웹 사이트, 웹 애플리케이션, 웹 서비스를 만들 수 있게 도와주는 

웹 애플리케이션 프레임워크입니다.

ASP.NET은 JSP나 PHP 등과 같은 대표적인 서버 사이드 스크립트 언어입니다.

서버 사이드 스크립트 언어

서버사이드 스크립트는 웹에서 사용되는 스크립트 언어 중 서버 사이드에서 실행되는 스크립트 언어를 말합니다.

ASP.NET 종류

  • ASP.NET 웹 폼

사건 기반 프로그래밍(Event-driven) 형식의 동적 웹 애플리케이션을 만들 수 있습니다.

다양한 컨트롤러와 컴포넌트들을 제공하며 데이터 접근에 편리한 기능들을 제공합니다.

사건 기반 프로그래밍

VB와 같이 사용자의 명령이나 마우스 클릭, 다른 프로그램의 메시지, 키보드 입력 등의 사건에 따라 제어 흐름이 결정되어 일을 하도록 만들어진 프로그래밍 언어 방식을 뜻합니다.


  • ASP.NET MVC

MVC 패턴의 웹 어플리케이션을 만들 수 있습니다.

MVC패턴

Model-View-Controller(MVC)는 개발을 하는 과정에서 비즈니스 처리 로직과 UI 요소들을 분리시켜 서로 영향 없이 개발하기 수월하다는 장점을 가지고 있습니다.
Model - Model은 무엇을 할것인지를 정의합니다.
Controller - 컨트롤러는 모델이 어떻게 처리할지를 알려주는 역할을 합니다.
View - 뷰는 화면에 무엇을 보여주도록 합니다. 컨트롤러가 보여주려고 하는 것들을 보여주는 역할을 합니다.
MVC패턴은 복잡한 화면과 여러가지 데이터의 구성이 필요하다면,
1개의 컨트롤러에 여러개의 Model과 View가 연결될 수 있습니다.

 


  • ASP.NET WEB PAGE

ASP.NET 웹페이지는 동적 웹 페이지를 만드는데 사용할 수 있는 프레임 워크입니다.

ASP.NET 웹 페이지를 사용하면 코드를 통해 즉시 페이지 콘텐츠를 만들 수 있습니다.

PHP나 기존의 ASP와 비슷합니다.

https://docs.microsoft.com/ko-kr/aspnet/web-pages/overview/getting-started/introducing-razor-syntax-c

 

Razor 구문 (C#)을 사용 하는 ASP.NET 웹 프로그래밍 소개

이 장에서는 Razor 구문를 사용 하 ASP.NET 웹 페이지 프로그래밍에 대 한 개요를 제공 합니다. ASP.NET는 동적 웹 pa를 실행 하는 Microsoft 기술입니다 ...

docs.microsoft.com

 

 

웹 폼 , MVC , 웹 페이지

 

위 3개의 프레임워크는 모두. NET 프레임워크를 기반으로 하고 ASP.NET의 핵심 기능을 공유합니다.

또 한 위 3개의 프레임워크는 모두 완전하게 독립적인것이 아니기 때문에 3가지를 동시에 사용할 수 있습니다.

반응형
반응형

 

1. 우리가 DOM을 조작했을 때

 

가상돔을 이해하기 위해서는 브라우저가 어떻게 작동하는지 알아야 합니다.

우리가 DOM을 조작했을 때 아래와 같은 작업들이 이루어집니다.

 

 

  • DOM Tree 생성

브라우저가 HTML을 전달받으면 브라우저가 이를 파싱하고 DOM노드로 이루어진 트리를 만듭니다.

노드

노드는 트리 구조로 정렬되기도 합니다.
노드는 하나의 자료 구조에 포함된 정보를 표현합니다.
출처
https://ko.wikipedia.org/wiki/%EB%85%B8%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)

 

  • Render Tree 생성

그 뒤에 inline 스타일과 외부 css 파일을 파싱합니다.

스타일 정보를 사용하여 DOM트리에 따라 렌더트리를 생성합니다.

 

  • Layout

렌터트리를 생성한 뒤, 각 노드들은 정확이 어디에 나타나야할 지 위치가 주어집니다.

 

  • Painting

Layout이 완료되면 트리의 각 노드들을 거쳐가면서 paint() 메서드를 호출합니다.

그렇게되면 우리가 적어놓은 HTML파일대로 웹이 나타나게 됩니다.

 


2. Virtual DOM

가상 돔을 사용하지 않는다면 화면에서 변경되는것들을 DOM이 직접 조작하여 브라우저에 반영시켜주었습니다.

DOM은 DOM트리가 수정될 때마다 렌더트리가 계속해서 리렌더링하게 됩니다.

즉 화면에서 10개의 수정사항이 발생하면 새로운 랜더 트리가 10번 수정되면서 새롭게 만들어지게 됩니다.

 

가상 돔을 활용한다면 이렇게 불 필요한 렌더링 횟수를 줄일 수 있습니다.

가상 돔은 모든 연산을 끝내고 실제 DOM에 전당합니다.

그렇게 된다면 실제 DOM은 딱 1번의 작업만 작업을 하게됩니다.

즉 한번만 렌더트리를 만들어내는것이죠.

 


 

반응형
반응형

프로그래머스 코딩테스트 완주하지 못한 선수 링크 : 여기를 눌러주세요.

 

프로그래머스에 있는 코딩테스트 완주하지 못한 선수 라는 제목의 문제입니다.

 

 

 

 

완주하지 못한 선수 어떻게 풀지 생각해보기

 

처음에는 파라미터로 받은 참여자배열과 완주자 배열에 있는 각각의 이름들을 하나씩 지워가며 마지막에

남은 이름을 return 하면 될 거라 생각했습니다.

 

그런데 이게 왠일? 

 

참여자 명단에 동명이인이 있을경우 계속해서 실패가 이루어졌습니다 ㅠㅠ...

 

어떻게하지 어떻게하지 하다가 생각한 수가

 

참여자 배열과 완주자배열을 "정렬" 합니다.

 

두가지 배열을 정렬한 다음 배열의 n번째가 달라진다면 그때의 참여자는 완주하지 못한 사람이 됩니다.

 

 

 

 

 

코딩테스트 통과한 소스보기

 

(점수를 5점 받았는데 지워졌스빈다...파일이..ㅠㅠ어디갔지)

 

1
2
3
4
5
6
7
8
9
10
11
public static String solution(String[] participant, String[] completion) {
        Arrays.sort(participant);
        Arrays.sort(completion);
        int i;
        for( i=0; i<completion.length; i++) {
            if(!participant[i].equals(completion[i])) {
                return participant[i];
            }
        }
        return "";
    }
cs

역시나 제가 푼 뒤에 다른사람들이 푼 코드들을 보면 한없이 초라해집니다..

 

저 또한 그분들처럼 효율적으로 코드를 짜기위해 많은 노력이 필요할 것 같습니다.

 

(사실 이 문제푸는데도 시간이 저는 꽤 걸렸네요...)

 

모든 코드에는 정답이 없으며 저 또한 코드를 잘 짜는게 아니기 때문에

 

제 코드는 참고용으로만 사용해주시면 감사하겠습니다.

 

최대한 매일매일 1개 이상의 코딩테스트 문제를 풀려고 노력중입니다.

 

아직 많이 부족해서 포스팅이 늦을 수 있으니 양해 부탁드립니다.

 

조언이나 가르침은 항상 기쁜마음으로 받겠습니다.

 

감사합니다 (_ _)

 

반응형

+ Recent posts