Noah_Developer
Developer Noah
Noah_Developer
전체 방문자
오늘
어제
  • 전체보기 (87)
    • Programmers (33)
      • Level1 (33)
    • FRONT-END (3)
      • React (2)
      • HTML (0)
      • CSS (0)
      • JavaScrpit (1)
    • BACK-END (23)
      • JAVA (14)
      • C (0)
      • Spring (5)
    • DATABASE (11)
      • MySQL (3)
      • Oracle (0)
    • IDE (2)
      • IntelliJ (2)
      • Eclipse (0)
      • VSCode (0)
    • Android (1)
    • 용어 (2)
      • 금융 (2)
    • Developer Diary (5)
      • Web (1)
    • 자격증 (1)
    • Operating System (3)
      • Linux (2)
    • Info (2)

블로그 메뉴

  • 홈
  • 방명록
  • 포트폴리오
  • 깃허브

공지사항

  • 🙏 방문 감사합니다.

인기 글

태그

  • 개발일기
  • 코딩테스트 문제
  • 초보자 알고리즘
  • 크레인 인형뽑기 정답
  • 크레인 인형뽑기 풀이
  • 자바 알고리즘 연습문제
  • programmers
  • 프로그래머스 코딩연습
  • MySQL
  • 자바 쉬운 알고리즘
  • 프로그래머스
  • 알고리즘 블로그
  • 알고리즘 문제
  • 프로그래머스 연습문제
  • 프로그래머스 문제풀이
  • programmers level 1
  • 프로그래머스 레벨1
  • 카카오 블라인드
  • String StringBuilder 차이
  • 알고리즘 풀이
  • 카카오 블라인드 테스트
  • level1
  • 코딩테스트 문제 풀이
  • 알고리즘 쉬운문제
  • 카카오공채
  • 알고리즘 예제
  • 코딩테스트
  • 알고리즘 연습문제
  • 크레인 인형뽑기
  • 코딩테스트 준비

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
Noah_Developer

Developer Noah

[Programmers Level1]  모의고사 정답 및 풀이 설명
Programmers/Level1

[Programmers Level1] 모의고사 정답 및 풀이 설명

2021. 4. 27. 14:59
728x90

문제 바로가기

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는

programmers.co.kr

문제 설명

수포자는 수학을 포기한 사람의 준말입니다.

수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다.

수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.

 

1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...

2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...

3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

 

1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때,

가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

 

제한 조건

  • 시험은 최대 10,000 문제로 구성되어있습니다.
  • 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

입출력 예

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

설명

입출력 예 #1

  • 수포자 1은 모든 문제를 맞혔습니다.
  • 수포자 2는 모든 문제를 틀렸습니다.
  • 수포자 3은 모든 문제를 틀렸습니다.

따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.

입출력 예 #2

  • 모든 사람이 2문제씩을 맞췄습니다.

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
27
28
29
30
31
32
33
34
35
36
37
38
39
    private void solution(int[] answerList)  {
 
        // 수포자 패턴 리스트 3개로 처리필요성 체크
        int[] supojaList1 = new int[]{1, 2, 3, 4, 5};
        int[] supojaList2 = new int[]{2, 1, 2, 3, 2, 4, 2, 5};
        int[] supojaList3 = new int[]{3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
 
        // 2차원 배열로 처리시 생기는 문제점?(식별성)
        int[][] supojaList = new int[][]{
            supojaList1, // 0 
            supojaList2, // 1
            supojaList3  // 2
        };
        
        // 정답 건수 처리할 해쉬맵 생성
        HashMap<Integer,Integer> answerCntHM = new HashMap<Integer,Integer>();
        // 답안지 길이만큼 도는 OUTER FOR
        for(int i = 0 ; i < answerList.length ; i++){ // 0~N
            // 수포자 답안지 길이만큼 도는 INNER FOR 
            for(int j = 0 ; j < supojaList.length ; j++){ // 0, 1, 2
                // 답안지의 배열에서 수포자 J의 답을 비교하여 같은지 검사하는 IF
                if(answerList[i] == supojaList[j][i%supojaList[j].length]) {
                    // 해쉬맵에 넣는다. (단, 같은 키값 존재시 +1 처리하여 정답 건수 체크)
                    answerCntHM.put(j, answerCntHM.getOrDefault(j,0) + 1);
                }   
            }
        }      
 
        // 해쉬맵 콘솔로그 출력
        System.out.println(answerCntHM);
        
        // 해쉬맵 사이즈 만큼 랭크 배열 생성
        int[] ranks = new int[answerCntHM.size()];
        // 랭크 길이만큼 도는 for
        for(int i = 0 ; i < ranks.length ; i ++){
            // 랭크 처리
            ranks[i] = ( answerCntHM.get(i) == answerCntHM.get(i-1) ) ? i+1 : i+1;
        }
    }
Colored by Color Scripter
cs

프로그래머스 모의고사 1차 테스트 결과.png
프로그래머스 모의고사 1차 채점 결과.png 

 

2차 시도... (1차 시도 후 약 3시간 30분 소요)

 

첫번째 작성한 소스가 발가락으로 짰다고 치면..

드디어? 손으로 짠것같은... 소스가 나왔다.. 

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
47
48
49
50
51
52
53
54
55
56
private int[] solution(int[] answerList)  {
    int[] answer;
    // 수포자 패턴 생성
    int[] pattern1 = new int[]{1, 2, 3, 4, 5};
    int[] pattern2 = new int[]{2, 1, 2, 3, 2, 4, 2, 5};
    int[] pattern3 = new int[]{3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
    
    // 2차원 패턴 배열 생성
    int[][] patternList = new int[][]{
        pattern1, // 0 
        pattern2, // 1
        pattern3  // 2
    };
    // 패턴리스트의 길이만큼 점수 리스트 생성
    int[] jumsu = new int[patternList.length];
    // 정답리스트만큼 수행하는 for
    for(int i = 0 ; i < answerList.length ; i++){
        // ★ 처리해야하는 패턴이 많아지면 하기 하드코딩한 숫자값(0, 1, 2)들을 처리하는 inner for 구현
        // 1번 패턴 정답 확인 후 점수 카운트 ++
        if(answerList[i] == patternList[0][i%patternList[0].length]) {
            jumsu[0]++;
        } 
        // 2번 패턴 정답 확인 후 점수 카운트 ++
        if(answerList[i] == patternList[1][i%patternList[1].length]) {
            jumsu[1]++;
        } 
        // 3번 패턴 정답 확인 후 점수 카운트 ++
        if(answerList[i] == patternList[2][i%patternList[2].length]) {
            jumsu[2]++;
        }
    }
    // 랭크 처리할 리스트 생성
    ArrayList<Integer> rankList = new ArrayList<Integer>();
    // ★ 여기도 마찬가지로 개선 필요할 것 같음.
    // 가장 높은 점수 체크
    int max = jumsu[0];
    // if( max < jumsu[0]) max = jumsu[0]; // 0으로 초기화 되어 생성되기 때문에 MAX값에 0번값으로 초기 세팅으로 변경
    if( max < jumsu[1]) max = jumsu[1];
    if( max < jumsu[2]) max = jumsu[2];
    // 점수 배열만큼 도는 for
    for(int i=0; i < jumsu.length ; i++) {
        // 점수배열에서 얻은 값이 가장 높은 점수인경우
        if (jumsu[i] == max){
            // 리스트에 담는다.
            rankList.add(i+1);
        }
    }
    
    // 랭크 처리 후 수포자 번호 리턴세팅
    answer = new int[rankList.size()];
    int idx = 0;
    for(int test : rankList){
        answer[idx++] = test;
    }
    return answer;
}
Colored by Color Scripter
cs

깔끔하게 처리 완료.

728x90
저작자표시 비영리 동일조건 (새창열림)

'Programmers > Level1' 카테고리의 다른 글

[Programmers Level1] 가운데 글자 가져오기 정답 및 문제 풀이  (0) 2021.04.30
[Programmers Level1] 문자열 내 p와 y의 개수 정답 및 문제 풀이  (0) 2021.04.29
[Programmers Level1] 신규 아이디 추천 정답 및 풀이 설명 카카오 블라인드 공개채용 문제  (0) 2021.04.28
[Programmers Level1] 완주하지 못한 선수 정답 및 풀이 설명  (0) 2021.04.26
[Programmers Level1] 크레인 인형뽑기 게임 정답 및 풀이 설명  (0) 2021.04.23
    'Programmers/Level1' 카테고리의 다른 글
    • [Programmers Level1] 문자열 내 p와 y의 개수 정답 및 문제 풀이
    • [Programmers Level1] 신규 아이디 추천 정답 및 풀이 설명 카카오 블라인드 공개채용 문제
    • [Programmers Level1] 완주하지 못한 선수 정답 및 풀이 설명
    • [Programmers Level1] 크레인 인형뽑기 게임 정답 및 풀이 설명
    Noah_Developer
    Noah_Developer
    개발 기록 목적을 가진 블로그입니다.

    티스토리툴바