네이버 코딩테스트 기출 - neibeo kodingteseuteu gichul

네이버 코딩테스트 기출 - neibeo kodingteseuteu gichul

1. 난이도

난이도는 그렇게 높지 않았다. 프로그래머스 기준 레벨2~레벨3 정도, 백준 기준 실버 2~골드 4 정도의 난이도였다. 작년까지는 3문제였다는데 올해는 120분 4문제였다.

문제 난이도 이외에 네이버 코테가 깐깐하다고 느꼈던게, 코테 대기하면서 커피마시고 있었는데 감독관님한테 커피 치워달라고 메시지가 왔고, 20분 전쯤에는 휴대폰 구도 조정해달라고 메시지 오는거 보고 감독 확실하게 하는구나 싶었다. 그리고 외부 ide도 못쓰게 해서 조금 힘들었다면 힘들었달까...

2. 문제 유형

1번같은 경우는 단순 구현 문제로, 조건 걸고 for문 순회할 줄 알면 누구나 풀 수 있었다. 2번은 문자열 처리 문제로, 프로그래머스에 돌아다니는 유형이 제법 있어서 그리 생소하지는 않았다. 3번은 정렬 문제였고, 4번은 조금 난이도가 있는데, 테트리스 응용 문제라 결과적으로 BFS/DFS로 접근하면 풀릴 문제라고 생각한다.

3. 결과

손 댄 문제는 3문제인데 완벽하게 풀었다고 말할 문제는 2문제밖에 없다... 1번 금방 풀고 2번 좀 까다롭게 생겨서 3번을 먼저 풀고 그다음에 2번 풀었는데, enumerate를 썼으면 2번도 잘 풀었겠지만 난 그러지 못했다... 다음부터는 enumerate를 적재적소에 활용하는 코딩맨이 되어야겠다...ㅠㅠ 그리고 4번은 시간없어서 pass...

4. 오늘의 교훈

for idx, val in enumerate(list) # list의 index와 value를 모두 가져옴

네이버 신입 공채 공고

네이버 코딩테스트 기출 - neibeo kodingteseuteu gichul
네이버 코딩테스트 기출 - neibeo kodingteseuteu gichul

시험 안내

네이버 신입공채는 서류를 먼저 제출하지만 자격요건에 적합하면 모두 코딩테스트를 볼 수 있습니다.
코딩테스트를 본 후, 코딩테스트 + 서류를 한번에 평가해 면접자가 정해집니다.
이에 저는 4월 12일전에 자소서를 제출하고 코딩테스트 관련 메일이 오기를 기다렸습니다.

'

온라인 코딩테스트 전형 상세 안내

' 메일은 시험을 보기 3일전 안내받았고
다음날인 시험 2일전 목요일에 아래와 같은 코딩테스트 초대 메일을 받았습니다.

네이버 코딩테스트 기출 - neibeo kodingteseuteu gichul

메일로 받은 링크를 들어가면 프로그래머스에서 화면공유 / 핸드폰 연결을 통해 시험환경을 미리 세팅해 볼 수 있습니다.

시험 유의사항

- A4와 필기도구 준비
- 중간에 화장실 등의 이유로 자리이탈 금지
- 중도퇴실은 가능
- 문제 유출 금지

시험 문제

- 4문제 120분
- C, C++, Java, JavaScript, Python3, Swift, Kotlin
- 효율성 문제 : 4문제중 1문제

문제에 대해 자세히 설명하면 문제가 될 수 있어 간단하게만 설명하자면, 
문자열, 구현, 이분탐색, 조합, 단순구현 등을 사용하는 문제가 나왔습니다.
저는 Python 을 사용하여 문자열, 조합을 사용하는 문제에서 시간을 단축할 수 있었습니다.

코딩테스트는 화면공유 / 핸드폰 연결을 모두 한 상태에서 진행되었고 온라인 감독관은 시험이 끝날때까지 함께 했습니다.
저는 일단 1번문제 15분, 2번 문제 70분, 3번문제 10분이 걸렸고 2번문제에서 모든 경우의 수를 따지다 보니 시간을 오래 써서..
4번문제를 이해한 이후에는 25분밖에 남지 않아 풀기를 포기하고
1 2 3번 문제의 코드를 깔끔하게 정리하고 주석을 달았습니다.

결론적으로는 3제출/4문제를 했고 제출을 했다고 모두 문제를 풀었다고 할 수는 없을 것 같아
개인적으로는 2~2.5솔했다고 생각하려고 합니다 ㅎㅎ

시험결과

시험결과는 코딩테스트를 본지 20일 뒤인 5월 14일에 메일을 통해 안내되었습니다.
결과는 탈락 😢😢😢😢😢😢
주변에 1솔하시고도 붙으신분이 있는걸로 봐서 코테성적보다는 서류의 비율이 더 높다고 생각합니다 ㅠㅠ

2022 프로그래머스

(주)그렙 / 공동대표 이확영, 임성수 / 서울특별시 서초구 강남대로 327, 2층 프로그래머스(서초동, 대륭서초타워) / 사업자등록번호 220-88-75699 / 통신판매업신고 제 2014-서울강남-03241호 / 직업정보제공사업 신고번호 J1200020180027 / 유료직업소개사업 등록번호 (국내)제2021-3210195-14-5-00026호 (국외)서울청 유 제2021-7호 / (주)그렙은 통신판매중개자로서, 통신판매의 당사자가 아니며 중개하는 콘텐츠 및 거래에 대한 책임을 부담하지 않습니다. 단, (주)그렙이 직접 제공하는 콘텐츠에 대해서는 책임을 부담합니다. 프로그래머스 사이트의 모든 콘텐츠, 정보, UI 등에 대한 무단 복제, 전송, 배포, 크롤링, 스크래핑 등의 행위를 거부하며, 이러한 행위는 관련 법령에 의해 엄격히 금지됩니다.

코딩테스트/프로그래머스

2021. 8. 12.

네이버 코딩테스트 기출 - neibeo kodingteseuteu gichul
상호 평가 - 네이버 코딩테스트(코테) 기출문제

https://programmers.co.kr/learn/courses/30/lessons/83201

코딩테스트 연습 - 2주차

[[100,90,98,88,65],[50,45,99,85,77],[47,88,95,80,67],[61,57,100,80,65],[24,90,94,75,65]] "FBABD" [[70,49,90],[68,50,38],[73,31,100]] "CFD"

programmers.co.kr

네이버 코딩테스트 기출 - neibeo kodingteseuteu gichul
  • 상호 평가

문제 설명

대학 교수인 당신은, 상호평가를 통하여 학생들이 제출한 과제물에 학점을 부여하려고 합니다. 아래는 0번부터 4번까지 번호가 매겨진 5명의 학생들이 자신과 다른 학생의 과제를 평가한 점수표입니다.

No. 0 1 2 3 4
0 100 90 98 88 65
1 50 45 99 85 77
2 47 88 95 80 67
3 61 57 100 80 65
4 24 90 94 75 65
평균 45.5 81.25 97.2 81.6 67.8
학점 F B A B D

위의 점수표에서, i행 j열의 값은 i번 학생이 평가한 j번 학생의 과제 점수입니다.

  • 0번 학생이 평가한 점수는 0번 행에담긴 [100, 90, 98, 88, 65]입니다.
    • 0번 학생은 자기 자신에게 100점, 1번 학생에게 90점, 2번 학생에게 98점, 3번 학생에게 88점, 4번 학생에게 65점을 부여했습니다.
  • 2번 학생이 평가한 점수는 2번 행에담긴 [47, 88, 95, 80, 67]입니다.
    • 2번 학생은 0번 학생에게 47점, 1번 학생에게 88점, 자기 자신에게 95점, 3번 학생에게 80점, 4번 학생에게 67점을 부여했습니다.

당신은 각 학생들이 받은 점수의 평균을 구하여, 기준에 따라 학점을 부여하려고 합니다.
만약, 학생들이 자기 자신을 평가한 점수가 유일한 최고점 또는 유일한 최저점이라면 그 점수는 제외하고 평균을 구합니다.

  • 0번 학생이 받은 점수는 0번 열에 담긴 [100, 50, 47, 61, 24]입니다. 자기 자신을 평가한 100점은 자신이 받은 점수 중에서 유일한 최고점이므로, 평균을 구할 때 제외합니다.
    • 0번 학생의 평균 점수는 (50+47+61+24) / 4 = 45.5입니다.
  • 4번 학생이 받은 점수는 4번 열에 담긴 [65, 77, 67, 65, 65]입니다. 자기 자신을 평가한 65점은 자신이 받은 점수 중에서 최저점이지만 같은 점수가 2개 더 있으므로, 유일한 최저점이 아닙니다. 따라서, 평균을 구할 때 제외하지 않습니다.
    • 4번 학생의 평균 점수는 (65+77+67+65+65) / 5 = 67.8입니다.

제외할 점수는 제외하고 평균을 구한 후, 아래 기준에 따라 학점을 부여합니다.

평균 학점
90점 이상 A
80점 이상 90점 미만 B
70점 이상 80점 미만 C
50점 이상 70점 미만 D
50점 미만 F

학생들의 점수가 담긴 정수형 2차원 배열 scores가 매개변수로 주어집니다. 이때, 학생들의 학점을 구하여 하나의 문자열로 만들어서 return 하도록 solution 함수를 완성해주세요.


제한사항

  • 2 ≤ scores의 행의 길이(학생 수) ≤ 10
  • scores의 열의 길이 = scores의 행의 길이
    • 즉, scores는 행과 열의 길이가 같은 2차원 배열입니다.
  • 0 ≤ scores의 원소 ≤ 100
  • return 값 형식
    • 0번 학생의 학점부터 차례대로 이어 붙인 하나의 문자열을 return 합니다.

입출력 예

scores result
[[100,90,98,88,65],[50,45,99,85,77],[47,88,95,80,67],[61,57,100,80,65],[24,90,94,75,65]] "FBABD"
[[50,90],[50,87]] "DA"
[[70,49,90],[68,50,38],[73,31,100]] "CFD"

입출력 예 설명

입출력 예 #1

문제 예시와 같습니다.

입출력 예 #2

No. 0 1
0 50 90
1 50 87
평균 50 90
학점 D A
  • 1번 학생이 자기 자신을 평가한 87점은 [90, 87]에서 유일한 최저점이므로, 평균을 구할 때 제외합니다.

입출력 예 #3

No. 0 1 2
0 70 49 90
1 68 50 38
2 73 31 100
평균 70.33… 40 64
학점 C F D
  • 1번 학생이 자기 자신을 평가한 50점은 [49, 50, 31]에서 유일한 최고점이므로, 평균을 구할 때 제외합니다.
  • 2번 학생이 자기 자신을 평가한 100점은 [90, 38, 100]에서 유일한 최고점이므로, 평균을 구할 때 제외합니다.

※ 문제풀이

이번 상반기 네이버 코딩테스트를 본 사람이라면 풀어봤을 문제이다.

이차원 배열에서 보통 [i][j]로 사용하지만, 이번에는 [j][i]를 사용해서 풀어야 하는 문제였다.

열과 행을 순환하는 인덱스를 서로 바꿔서 쓸줄 알았다면 무난히 풀었을 문제이다.

package secondWeek;

import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

public class SecondWeek {
	public static void main(String[] args) {
		Solution s = new Solution();
		int[][] arr1 ={{100,90,98,88,65},{50,45,99,85,77},{47,88,95,80,67},{61,57,100,80,65},{24,90,94,75,65}}; 
		System.out.println(s.solution(arr1));
		int[][] arr2 = {{50,90},{50,87}};
		System.out.println(s.solution(arr2));
		int[][] arr3 = {{70,49,90},{68,50,38},{73,31,100}};
		System.out.println(s.solution(arr3));
	}
}

class Solution {
    public String solution(int[][] scores) {
        String answer = "";
        
        for (int i = 0; i < scores.length; i++) {
        	Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
        	int min = Integer.MAX_VALUE;
        	int max = Integer.MIN_VALUE;
        	
        	// 최대, 최소, 단일 건수인지 조회
        	for (int j = 0; j < scores[i].length; j++) {
				min = Math.min(min, scores[j][i]);
				max = Math.max(max, scores[j][i]);
				map.put(scores[j][i], map.getOrDefault(scores[j][i], 0) + 1);
			}
        	
        	// 자기 자신에게 준 점수가 단일로 최고인지 최저인지 판단하여 해당되면 삭제한다.
        	if(scores[i][i] == max && map.get(max) == 1) map.remove(max);
        	if(scores[i][i] == min && map.get(min) == 1) map.remove(min);
        	
        	int total = 0;
        	int cnt = 0;
        	
        	// 평균을 구하기 위한 갯수와 총합 연산
        	Iterator<Integer> ir = map.keySet().iterator();
        	while(ir.hasNext()) {
        		int key = ir.next();
        		total += key * map.get(key);
        		cnt += map.get(key);
        	}
        	
        	double average = (double) total / cnt;
        	char grade;
        	
        	if(average >= 90) {
        		grade = 'A';
        	} else if(average >= 80 ) {
        		grade = 'B';
        	} else if(average >= 70 ) {
        		grade = 'C';
        	} else if(average >= 50 ) {
        		grade = 'D';
        	} else {
        		grade = 'F';
        	}
        	
        	answer += grade;
		}
        
        return answer;
    }
}

관련글