딱히 할게 없을때는 알고리즘 문제를 풀면서 시간을 보내보도록 하려구 합니다.


프로그래머스에서 나온 문제들을 하나씩 풀면서 알고리즘을 공부하겠습니다.

알고리즘을 잘 못하기때문에 쉬운거부터 하나씩 풀어가면서 문제를 풀어보도록 하죠!

(참고로 Java를 사용합니다.)


[문제 Lv.1 완주하지 못한 선수]

수많은 마라톤 선수들이 마라톤에 참여하였습니다.

단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

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


[제한사항]

마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.

completion의 길이는 participant의 길이보다 1 작습니다.

참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.

참가자 중에는 동명이인이 있을 수 있습니다.


[입출력 예]

   participant                              | completion                      |     return

[leo, kiki, eden]                           |  [eden, kiki]                |       leo

[marina, josipa, nikola, vinko, filipa] | [josipa, filipa, marina, nikola]  |      vinko

[mislav, stanko, mislav, ana]           | [stanko, ana, mislav]        |      mislav


[입출력 예 설명]

예제 #1

leo는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #2

vinko는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #3

mislav는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.


[문제 풀이]


import java.util.*;

class Solution {

    public String solution(String[] participant, String[] completion) {

        String answer = "";        


        Arrays.sort(participant);   //참가자를 이름 순으로 정렬 합니다.

        Arrays.sort(completion);  //완주자를 이름 순으로 정렬 합니다.

        /*참가자와 완주자를 배열 0부터 하나씩 비교합니다. */

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

        if(participant[i].equals(completion[i])==false) {  

        answer=participant[i];  //만약 참가자 배열[i] 완주자 배열[i]이 동일하지 않은 위치가 완주하지 못한 선수

        break;

        }else

    answer = participant[i+1];  // 완주하지 못한 선수가 정렬시 참가자 배열에서 마지막에 위치한 경우

        }     

        return answer;

    }

}


실행 시간은 O(n)





Window에 virtual Box를 설치하는 작업을 시작해 보져


Windows PC 에 ubuntu linux 사용 방법


1. 먼저 사용하고자 하는 ubuntu iso 파일을 download 합니다.  (저는 16.04버전을 사용합니다.)

https://www.ubuntu.com/download/desktop


2. 개인 PC 에 취향에 따라 VirtualBox 혹은 VM ware을 설치 합니다.

Virtual Box : https://www.virtualbox.org/wiki/Downloads?replytocom=98578

VMware : https://www.vmware.com/kr/products/workstation-player/workstation-player-evaluation.html


3. 그리고 설치해주세요!


4. apt-get 패키지 다운로드 서버를 한국쪽으로 변경하여 다운로드 속도를 올려줍시다.

sudo vim /etc/apt/source.list 를 kr.archive.ubuntu.com 을 ftp.daumkakao.com 으로 변경


위에 보이는 %/security.ubuntu.com/ftp.daumkakao.com/g < 명령어를 작성하거나

 sed ‘s/us.archive.ubuntu.com/ftp.daumkakao.com/g’ sources.list < sed 명령어를 통해 바꿔 주시면 됩니다.


5. 마지막으로 sudo apt-get update 하고 sudo apt-get upgrade 를 해주어 Update도 할겸 

FTP가 변경 되었는지 확인해 주시면 됩니다. 

이렇게 뜨면 변경 성공!


6. 설치가 완료 되었으면 일단 개인의 취향대로 edit 편집기를 설치합니다.

개인적으로 vim이 편하기 때문에 저는 제일 먼저 sudo apt-get install vim 을 통해 설치했습니다.


이렇게 하면 설치 완료!

이제부터 리눅스(Ubuntu) 서버에 관해서 천천히 공부를 시작하겠습니다!






'IT > Linux(ubuntu)' 카테고리의 다른 글

ubuntu 계정생성  (0) 2021.11.26
ubuntu 웹서버 구축해보기  (0) 2021.11.26
외부접속 설정하기  (0) 2018.12.12
우분투 계정 생성하기  (0) 2018.12.10

알고리즘에 문제들을 풀어보기 전에 기본적으로 사용되는 알고리즘에 대하여 정리 해보겠습니다.

(아래 내용들의 출처는 Topcit 에센스 내용을 참고 했습니다.)

(https://www.topcit.or.kr/edubox/essence/topcitEssence.do)



* 알고리즘이란 ? 

- 문제 해결을 위한 과정을 단계적으로 기술한 것.

  명확성(Definitness), 유한성(Finiteness), 유효성 (Effectiveness)를 만족해야 한다.


* 분석 기준

- 정확성 : 시간 내에 결과를 산출해야 한다

- 작업량 : 결과가 나올때까지 수행하는 횟수

- 기억 저장소 사용량 : 메모리 사용량

- 최적성 : 최적합 여부

- 단순성 : 작성 및 디버깅이 수월해야함


또 알고리즘에 대한 성능을 분석하는 방식이 있는데, 다음 2가지 방식이 있습니다.


* 성능 분석

- 공간 복잡도

프로그램으로 실행하여 완료하기까지 필요한 총 저장공간(고정 공간량 + 가변 공간량)

          •  고정 공간량 : 입출력에 상관 없이 고정적으로 필요한 공간
          •  가변 공간량 : 수행 과정에 사용되는 공간

- 시간 복잡도

프로그램을 실행하여 완료하기까지 걸리는 컴파일 시간과 실행 시간의 합

tip) 알고리즘 성능

log n < n < nlogn < n^2 < n^3 < 2^n


주로 알고리즘 문제를 풀때는 시간복잡도를 이용하여 계산을 많이하지요 ㅎㅎ


본격적으로 알고리즘 기초인 정렬에 관하여 공부해 보겠습니다.

알고리즘 코드를 들어가기 전! 어떤 정렬 방식들이 있는지 살펴 보아요!


내부 정렬은 다음과 같이 10가지로 나눌 수 있습니다. 

전공 수업을 들었을땐  계수정렬과 기수정렬은 안배워서 저도 이번에 알게 되었네요!


* 정렬


- 내부 정렬의 분류

내부 정렬은 아래 그림과 같이 나눌 수 있고 수행시간도 같이 적어 놓았습니다.





이상으로 알고리즘 기초와 정렬에 관하여 정리를 했고

다음 시간부터는 각 정렬에 관하여 공부를 해보도록 합시다!



#1 Dan Story 지금부터 시작합니다!



+ Recent posts