컴퓨터공학(Computer Science and Engineering))

[2020 하반기 한국조폐공사] 코딩 데모 테스트

가람스나이퍼님 (Joshua_Choi_Brother) 2020. 10. 27. 17:04

[java] 직사각형 나머지 한점 좌표 찾기 #Programmers

문제 설명

직사각형을 만드는 데 필요한 4개의 점 중 3개의 좌표가 주어질 때, 나머지 한 점의 좌표를 구하려고 합니다. 점 3개의 좌표가 들어있는 배열 v가 매개변수로 주어질 때, 직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 return 하도록 solution 함수를 완성해주세요. 단, 직사각형의 각 변은 x축, y축에 평행하며, 반드시 직사각형을 만들 수 있는 경우만 입력으로 주어집니다.

제한사항

  • v는 세 점의 좌표가 들어있는 2차원 배열입니다.
  • v의 각 원소는 점의 좌표를 나타내며, 좌표는 [x축 좌표, y축 좌표] 순으로 주어집니다.
  • 좌표값은 1 이상 10억 이하의 자연수입니다.
  • 직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 [x축 좌표, y축 좌표] 순으로 담아 return 해주세요.

입출력 예

vresult

[[1, 4], [3, 4], [3, 10]] [1, 10]
[[1, 1], [2, 2], [1, 2]] [2, 1]

입출력 예 설명

입출력 예 #1
세 점이 [1, 4], [3, 4], [3, 10] 위치에 있을 때, [1, 10]에 점이 위치하면 직사각형이 됩니다.

입출력 예 #2
세 점이 [1, 1], [2, 2], [1, 2] 위치에 있을 때, [2, 1]에 점이 위치하면 직사각형이 됩니다.

-- 코드를 입력하세요

class Solution {
    public int[] solution(int[][] v) {
        int x;
        int y;
        
        if(v[0][0]==v[2][0]){
            x=v[1][0];
        }else if(v[1][0]==v[2][0]){
            x=v[0][0];
        }else{
            x=v[2][0];
        }
        
        if(v[0][1]==v[1][1]){
            y=v[2][1];
        }else if(v[1][1]==v[2][1]){
            y=v[0][1];
        }else{
            y=v[1][1];
        }
        
        int[] answer={x,y};
        return answer;
    }
}

실행 결과

테스트 1
입력값 [[1, 4], [3, 4], [3, 10]]
기댓값 [1, 10]
실행 결과 테스트를 통과하였습니다.
테스트 2
입력값 [[1, 1], [2, 2], [1, 2]]
기댓값 [2, 1]
실행 결과 테스트를 통과하였습니다.

테스트 결과 (~˘▾˘)~

2개 중 2개 성공

샘플 테스트 케이스를 통과했다는 의미로, 작성한 코드가 문제의 정답은 아닐 수 있습니다.
(샘플 테스트 케이스는 [테스트 케이스 추가하기] 버튼을 통해 확인하실 수 있습니다.)

[SQL] DB - 프로그래머스

문제 설명

EMPLOYEES 테이블은 자동차 판매 회사에서 일하고 있는 직원의 정보가 담긴 테이블입니다. EMPLOYEES테이블 구조는 다음과 같으며, ID, NAME, SALARY, BRANCH_ID는 각각 직원의 아이디, 이름, 월급, 근무하는 대리점 아이디를 나타냅니다.

NAMETYPENULLABLE

ID INT FALSE
NAME VARCHAR(N) FALSE
SALARY NUMERIC(N,M) FALSE
BRANCH_ID INT FALSE

문제

EMPLOYEES 테이블을 이용해 지점 별 총급여액이 얼마인지 조회하는 SQL문을 작성해주세요.
단, 결과는 지점의 ID순으로 정렬되어야 합니다.

예시

예를 들어 EMPLOYEES 테이블이 다음과 같다면

IDNAMESALARYBRANCH_ID

4603 Alayna 180 15
4651 Juliet 300 17
864 Holly 330 16
2842 Kyra 280 16

15번 지점의 총급여액은 180 (Alayna)
16번 지점의 총급여액은 330 + 280 (Holly, Kyra)
17번 지점의 총급여액은 300 (Juliet)

이므로, SQL을 실행하면 다음과 같이 출력되어야 합니다.

BRANCH_IDTOTAL

15 180
16 610
17 300

-- 코드를 입력하세요
SELECT BRANCH_ID, SUM(SALARY) as TOTAL from EMPLOYEES GROUP BY BRANCH_ID ORDER BY BRANCH_ID ASC;

실행 결과

branch_idtotal

1 1780
4 1110
5 880
6 900
7 1520
8 880
9 270
10 500
11 390
13 700
14 330
15 600
16 270
17 1030
18 600
19 270
21 270
22 270
23 570
24 450
25 450
26 870
27 600
30 1000
31 740
32 390
33 270
35 1220
36 330
37 1360
38 370
40 890
41 1010
42 300
43 300
44 580
45 800
46 990
48 250
49 300
50 1400
51 720
52 780
53 630
54 500
55 330
57 1240
59 300
60 950
61 1360
62 740
63 660
64 1110
65 540
66 940

 

한국 조폐공사 코딩 테스트 후기

하지만 그것은 나의 착각이었다. 실제 본 테스트에서는 테스트 예제와는 비교할 수 없을 정도로 어려운 문제들이 나왔다. 문제가 너무 길어 멀미와 현기증으로 헛구역질이 나올뻔했다. 설상가상으로 난독증마저 걸렸는지 눈에 잘 들어오지 않았다. 문제 유출 방지 서약을 했기에 문제를 정확히 알려드릴 순 없지만 대충 아래와 같이 문제가 나왔다.

1번 문제 : 문자열, 조건별 점수 계산, 정렬 혼합 문제

2번 문제 : 트리의 중위 운행법 응용문제

3번 문제 : 경우의 수 문제

4번 문제 : SQL문제

이렇게 나왔다. 우선 SQL문제부터 풀었다. SQL문제는 서브 쿼리를 사용하거나 With 절을 사용하면 해결할 수 있는 문제였는데 나는 With절을 사용해서 그것을 Join 하는 방식으로 문제를 풀었다. 구글링과 자동완성이 없어 쌩 코딩을 했어야 했는데 문법오류가 몇번 나서 정말 식겁했다. SQL문제를 푼 뒤 Java 알고리즘 문제들을 봤는데 1번 2번 3번 순으로 난이도가 올라가는 듯하였다. 제일 쉬운 1번부터 달려들었다. 1번 문제는 어렵지는 않는데 조금 지저분한 문제랄까.... 이것저것 뭐가 많았다. 짧은시간이지만 1주일동안 알고리즘 잡스에서 여러번 문제를 풀어봤기에 망정이지 아니었으면 정말 1번도 못풀뻔했다. 어떻게 1번문제 꾸역꾸역 풀긴 했는데 여기서만 1시간을 넘게 소모했고 1번을 푸니 시간이 30분밖에 남지 않았다. 2번 문제는 트리의 중위 운행법 자체를 구현해본 적이 없기에 풀지 못한다 생각하여 남은 시간 동안 경우의 수 문제만 풀었다. 하지만 시간이 부족하여 정확한 알고리즘을 구현하지 못하였고 시험이 종료되었다.