반응형

자바 코드로 풀어보았다.

 

 

 

문제 설명

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다.

전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성해주세요.

제한사항

  • 전체 학생의 수는 2명 이상 30명 이하입니다.
  • 체육복을 도난당한 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.
  • 여벌의 체육복을 가져온 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.
  • 여벌 체육복이 있는 학생만 다른 학생에게 체육복을 빌려줄 수 있습니다.
  • 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.

입출력 예

n       lost       reserve       return

5 [2, 4] [1, 3, 5] 5
5 [2, 4] [3] 4
3 [3] [1] 2

입출력 예 설명

예제 #1
1번 학생이 2번 학생에게 체육복을 빌려주고, 3번 학생이나 5번 학생이 4번 학생에게 체육복을 빌려주면 학생 5명이 체육수업을 들을 수 있습니다.

예제 #2
3번 학생이 2번 학생이나 4번 학생에게 체육복을 빌려주면 학생 4명이 체육수업을 들을 수 있습니다.

출처

※ 공지 - 2019년 2월 18일 지문이 리뉴얼되었습니다.
※ 공지 - 2019년 2월 27일, 28일 테스트케이스가 추가되었습니다.

 

 

 

문제 푸는 방법:

다양한 경우를 생각해주어야 한다.

실수할 수 있는 부분이, 뒷 번호 친구에게 빌리는데, 뒷 번호 친구가 잃어버린 친구라면 빌려줄 수 없는 상황이다.

그래서 그것을 고려해서 문제를 풀어주어야 한다.

 

 

정답 코드:

import java.util.*;

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = n-lost.length;
        int[] students = new int[n];
        Arrays.sort(reserve);
        Arrays.sort(lost);
        ArrayList<Integer> reserve_ = new ArrayList<>();
        ArrayList<Integer> lost_ = new ArrayList<>();
        for(int i: reserve){
            reserve_.add(i);
        }
        for(int i: lost){
            lost_.add(i);
        }
        for(int i=0; i< lost_.size(); i++){
            if(reserve_.contains(lost_.get(i))){
                reserve_.remove(reserve_.indexOf(lost_.get(i)));
                answer++;
            }else{
                if(reserve_.contains(lost_.get(i)-1)){
                    reserve_.remove(reserve_.indexOf(lost_.get(i)-1));
                    answer++;
                    continue;
                }else if(reserve_.contains(lost_.get(i)+1)){
                    if(lost_.contains(lost_.get(i)+1)){
                        continue;
                    }else{
                        reserve_.remove(reserve_.indexOf(lost_.get(i)+1));
                        answer++;
                        continue;
                    }
                }
            }
        }
        return answer;
    }
}
반응형
반응형

자바 코드로 풀어보았다.

 

 

 

 

 

문제 설명

게임개발자인 죠르디는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다.
죠르디는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다.

게임 화면은 1 x 1 크기의 칸들로 이루어진 N x N 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 5 x 5 크기의 예시입니다). 각 격자 칸에는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다. 모든 인형은 1 x 1 크기의 격자 한 칸을 차지하며 격자의 가장 아래 칸부터 차곡차곡 쌓여 있습니다. 게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올릴 수 있습니다. 집어 올린 인형은 바구니에 쌓이게 되는 데, 이때 바구니의 가장 아래 칸부터 인형이 순서대로 쌓이게 됩니다. 다음 그림은 [1번, 5번, 3번] 위치에서 순서대로 인형을 집어 올려 바구니에 담은 모습입니다.

만약 같은 모양의 인형 두 개가 바구니에 연속해서 쌓이게 되면 두 인형은 터뜨려지면서 바구니에서 사라지게 됩니다. 위 상태에서 이어서 [5번] 위치에서 인형을 집어 바구니에 쌓으면 같은 모양 인형 두 개가 없어집니다.

크레인 작동 시 인형이 집어지지 않는 경우는 없으나 만약 인형이 없는 곳에서 크레인을 작동시키는 경우에는 아무런 일도 일어나지 않습니다. 또한 바구니는 모든 인형이 들어갈 수 있을 만큼 충분히 크다고 가정합니다. (그림에서는 화면표시 제약으로 5칸만으로 표현하였음)

게임 화면의 격자의 상태가 담긴 2차원 배열 board와 인형을 집기 위해 크레인을 작동시킨 위치가 담긴 배열 moves가 매개변수로 주어질 때, 크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return 하도록 solution 함수를 완성해주세요.

[제한사항]

  • board 배열은 2차원 배열로 크기는 5 x 5 이상 30 x 30 이하입니다.
  • board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다.
    • 0은 빈 칸을 나타냅니다.
    • 1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다.
  • moves 배열의 크기는 1 이상 1,000 이하입니다.
  • moves 배열 각 원소들의 값은 1 이상이며 board 배열의 가로 크기 이하인 자연수입니다.

입출력 예

board       moves       result

[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4

입출력 예에 대한 설명

입출력 예 #1

인형의 처음 상태는 문제에 주어진 예시와 같습니다. 크레인이 [1, 5, 3, 5, 1, 2, 1, 4] 번 위치에서 차례대로 인형을 집어서 바구니에 옮겨 담은 후, 상태는 아래 그림과 같으며 바구니에 담는 과정에서 터트려져 사라진 인형은 4개 입니다.

 

 

문제 푸는 방법:

자바 import를 잘 해서

ArrayList로 풀 수 있다.

처음에는 ArrayList 사용하는 것이 익숙하지 않았는데,

조금씩 풀어보니까 조금씩 익숙해진다. 화이팅!!

 

정답 코드:

import java.util.*;

class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        int cnt;
        int[] height = new int[board.length];
        for(int i=0; i<height.length; i++){
            cnt = 0;
            for(int j=0; i<height.length; j++){
                if(board[j][i] == 0){
                    cnt++;
                }else{
                    break;
                }
            }
            height[i] = cnt;
        }
        ArrayList<Integer> list = new ArrayList<>();
        
        
        for(int i=0; i<moves.length; i++){
            if(height[moves[i]-1] < height.length){
                list.add(board[height[moves[i]-1]][moves[i]-1]);
                height[moves[i]-1]++;
                if(list.size() >= 2){
                    if(list.get(list.size()-1) == list.get(list.size()-2)){
                        list.remove(list.size()-1);
                        list.remove(list.size()-1);
                        answer += 2;
                    }
                }
            }
            
        }
        
        
        return answer;
    }
}
반응형
반응형

java 코드로 한번 풀어보았다.

 

 

문제 설명

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.


제한사항

  • numbers의 길이는 2 이상 100 이하입니다.
    • numbers의 모든 수는 0 이상 100 이하입니다.

입출력 예

numbers      result

[2,1,3,4,1] [2,3,4,5,6,7]
[5,0,2,7] [2,5,7,9,12]

입출력 예 설명

입출력 예 #1

  • 2 = 1 + 1 입니다. (1이 numbers에 두 개 있습니다.)
  • 3 = 2 + 1 입니다.
  • 4 = 1 + 3 입니다.
  • 5 = 1 + 4 = 2 + 3 입니다.
  • 6 = 2 + 4 입니다.
  • 7 = 3 + 4 입니다.
  • 따라서 [2,3,4,5,6,7] 을 return 해야 합니다.

입출력 예 #2

  • 2 = 0 + 2 입니다.
  • 5 = 5 + 0 입니다.
  • 7 = 0 + 7 = 5 + 2 입니다.
  • 9 = 2 + 7 입니다.
  • 12 = 5 + 7 입니다.
  • 따라서 [2,5,7,9,12] 를 return 해야 합니다.

 

 

문제 푸는 방법:

import java.util.*; 이거를 해서

ArrayList랑 HashSet이랑 Collections.sort를 사용하면 된다.

그냥 완전탐색해서 set에 넣어주고 정렬해주면 별다른 에러는 발생하지 않는다.

 

 

정답코드:

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        int[] answer = {};
        HashSet<Integer> temp = new HashSet<>();
        for(int i=0; i<numbers.length; i++){
            for(int j=i+1; j<numbers.length; j++){
                temp.add(numbers[i]+numbers[j]);
            }
        }
        List<Integer> result = new ArrayList(temp);
        Collections.sort(result);
        answer = new int[result.size()];
        for(int i=0; i<result.size(); i++){
            answer[i] = result.get(i);
        }
        return answer;
    }
}

 

 

 

반응형
반응형

 

 

오늘 한 일

마이다스아이티 지원서 접수

 

이제 겨울이 오려나보다

날씨가 점점 쌀쌀해진다..!

 

취업을 준비하면서 감사한 것은 

카페에서 여유로운 시간을 가질 수 있다는 것이다.

재정적으로도 하루 1만원 정도는 부담없이 쓸 수 있다는 것에 감사하다.

 

날씨가 추워지면서 몸도 많이 얼어있는 것 같다.

오늘은 무엇을 해야할까 고민이 된다.

 

이것저것 할 수 있는 것은 참 많지만,

하나님과 친밀함이 없는 채 하는 모든 것들은

내게 기쁨을 줄 수 없다.

 

앞으로 취업을 준비하면서 하나님과 가까워지는 부분에 더 초점을 맞춰야겠다.

 

하나님을 더 사랑하고 말씀을 사랑해야지!

 

오늘은 푹 쉬기!

반응형
반응형

Linux 혹은 Mac 터미널에서 특정 명령어가 없다고 나올때

예를 들어 emacs 키려고 ema 라고 했는데 없는 명령어라고 나올때, 경로가 설정되지 않은 경우가 많다.

 

이런 경우에는 

1) 터미널에서 which emacs 라고 검색한 후에 나오는 emacs의 경로를 복사하고

 

2) zsh 인 경우에는 vi ~/.zshrc 

일반 터미널 경우에는 vi ~/.bashrc

로 설정 파일을 들어가서 아래 테스트를 입력해준다.

alias ema='/usr/local/bin/emacs' // 여기서 emacs 시스템의 경로를 넣어준다.

 

 

3) 그리고 해당 설정 파일을 적용하기 위해

아래 명령어를 입력해준다.

source ~/.zshrc 혹은 source ~/.bashrc
반응형
반응형

 

오늘도 밤 늦게 카페에 출근을 했다.!

거의 자율출근제..

ㅋㅋㅋ

 

오늘은 집에서 현대무벡스 코딩테스트를 봤다.

프로그래머스에서 봤는데 중간에 서버 오류나서 15분 정도 날렸다...

그래도 5문제 중 4문제는 풀었다(효율성 테스트는 못함)

 

문제를 풀고 메일을 확인해보니, 현대IT&E 서류합격 연락이 왔다.

이번주 토요일: 코딩테스트, 주일: AI역량면접 이라고 한다.

 

이번주 일정을 정리해본다.

금요일: 한국투자신탁운용 온라인 인적성

토요일: 현대IT&E 코딩테스트

주일: 현대IT&E AI 역량 면접

11월 2~3주: 현대무벡스 1차면접, 한화/기계 최종면접

 

하나님께 감사드린다.

처음에 컴퓨터에 대해서 제대로 공부도 하지 않았던 나인데,

4학년 말부터 흥미를 가지게 되고, SKT 인턴도 하면서 사회 경험도 쌓고, 빅데이터에 대한 열정도 주시고

이렇게 성실하게 공부를 하고 있는 모습을 보니까 감사하다.

 

 

오늘 읽은 성경의 말씀 구절이 너무 좋다

 

"그들은 잠시 자기의 뜻대로 우리를 징계하였거니와

오직 하나님은 우리의 유익을 위하여 그의 거룩하심에 참여하게 하시느니라

무릇 징계가 당시에는 즐거워 보이지 않고 슬퍼 보이나

후에 그로 말미암아 연단 받은 자들은 의와 평강의 열매를 맺느니라"

- 히브리서 12장 10~11절 말씀 -

 

 

내 평생에 하나님을 배신하지 않고, 잊지 않고 감사해야 한다!

하나님께서는 나의 Way Maker 되십니다!

반응형
반응형

 

그들은 잠시 자기의 뜻대로 우리를 징계하였거니와

오직 하나님은 우리의 유익을 위하여 그의 거룩하심에 참여하게 하시느니라

무릇 징계가 당시에는 즐거워 보이지 않고 슬퍼 보이나

후에 그로 말미암아 연단 받은 자들은 의와 평강의 열매를 맺느니라

- 히브리서 12장 10,11절 말씀 -

 

 

아침에 묵상을 하였다.

취업이 중요하다고 생각되지만, 

가장 놓치지 말아야 하는 것은 매일 매일 하나님과의 친밀함이다.

 

앞으로 나의 길을 예비해두셨는데,

조급해하지 않고, 하루하루 성실하게 최선을 다하자!

그리고 무엇보다 기도보다 성령보다 앞서지 말자!

 

하나님께서 나의 Way Maker 되십니다! 아멘!

반응형

'2020 취준생활' 카테고리의 다른 글

2020.11.5(목) - Henry's daily log  (2) 2020.11.05
2020.11.3(화) - Henry's daily log  (1) 2020.11.03
시험이 어려운 나에게..!  (1) 2020.11.02
2020.11.2(월) - Henry's daily log  (0) 2020.11.02
2020.10.29(목) - Henry's daily log  (0) 2020.10.29
반응형

 

잘 할 수 있다!

처음이 어렵지 하다보면 익숙해진다.

 

내가 못하는 것이 아니라, 아직 익숙하지 않은 것이다!

 

분명히 좋은 길이 있을꺼야!

성실하게 하는 자에게 축복이 있을꺼야~!! 화이팅!

 

어려우면 때로는 답지도 보고, 

힘들때는 맛있는 것도 먹어보고

세상에는 누리며 감사할 것들이 너무나도 많다!

감사합시다!

 

 

 

반응형

'2020 취준생활' 카테고리의 다른 글

2020.11.3(화) - Henry's daily log  (1) 2020.11.03
2020.11.03 - 오늘의 말씀!  (0) 2020.11.03
2020.11.2(월) - Henry's daily log  (0) 2020.11.02
2020.10.29(목) - Henry's daily log  (0) 2020.10.29
2020.10.28(수) - Henry's daily log  (0) 2020.10.28

+ Recent posts