자바 코딩 질문드립니다

조회수 848회
for(int p = 0; p < index.length;p++) 
        {
            int count=0;
            for(int q = p+1; q < index.length; q++) {
         if (Arrays.equals(index[p], index[q]))
         {

             count = count +1;

         }
            }
            if (count==7) 
            {
            for (int i = 0; i < 6; i++)       // 당첨번호 출력
             {

                  System.out.println(index[p][i]);
             }
            System.out.println("중복 횟수"+count); //중복횟수가 7이 아닌 5,6이 같이 나옵니다
            }
        }

index배열의 요소를 서로 비교하다가 7번 중복인 요소를 출력하려고 하는데 중복횟수가 7이 아닌 다른것도 출력이 되는데 어디가 잘못 된건지 잘 모르겠습니다. 형님들 한번 봐주십시요.

  • index 요소를 비교하신다고 하셨는데 Arrays.equals(index[p], index[q])이놈은 "index[p]와index[q]의 전체가 같냐"라고 물어보는 것 같습니다. index가 2차원 배열이기 때문에 "index배열의 요소를 서로 비교하다가"라는 말과는 좀 다르게 수행할 수도 있을 것 같아요. 심승현 2018.8.20 13:34
  • 심승현님 index배열(2차원배열)의 내부 요소중에 7번 중복이 일어나는 요소을 찾아 내려면 어떻게 하면 될까요? 알 수 없는 사용자 2018.8.20 13:44
  • 질문이 있으시면 편집요청을 하지 마시고 댓글을 달아주세요 :) 알 수 없는 사용자 2018.8.20 15:12

1 답변

  • 단순 2차원 배열에서 중복을 확인하는데는 많은 방법이 있겠지만 Map을 활용하는 것도 좋을 것 같습니다.

    import java.util.HashMap;
    import java.util.Map;
    import java.util.Random;
    
    public class Main {
    
        private static int index[][] = new int[20][20];
        private static Map<Integer, Integer> duplicate;
    
    
        public static void main(String[] args) {
            duplicate = new HashMap<>();
    
            for(int i=0; i<index.length; i++) {
                for(int j=0; j<index[i].length; j++) {
                    index[i][j] = new Random().nextInt(100);
                }
            }
    
            for(int i=0; i<index.length; i++) {
                for(int j=0; j<index[i].length; j++) {
                    Integer value = duplicate.get(index[i][j]);
                    if(value==null) value = 0;
                    duplicate.put(index[i][j], value+1);
                }
            }
    
            for(Map.Entry<Integer, Integer> entry : duplicate.entrySet()) {
                if(entry.getValue()==7)
                    System.out.println(entry.getKey() + " : " + entry.getValue() + "번 중복!");
            }
        }
    }
    

    100까지의 난수를 생성해서 중복을 계산하는 코드입니다. key값을 숫자로, value 값을 중복횟수로 잡으면 7번 중복되는 숫자를 쉽게 뽑아낼 수 있습니다.

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 알겠습니다. 제가 사용법을 잘 몰라서 실수했네요. 제 질문은 갯수가 많아도 상관없나요? 알 수 없는 사용자 2018.8.20 15:15
    • 직접 해보시면 되지 않을까요? 시간이 더 걸릴 뿐이겠죠? 알 수 없는 사용자 2018.8.20 15:17
    • 배열 갯수가 많아지니까 아웃오브힙이 나오더라구요(2천만개). 그래서 천만개로 해보고 있는데 괜찮나 해서요 알 수 없는 사용자 2018.8.20 15:24
    • 메모리에 제한이 있으니 어느정도까지는 되겠지만 한계가 있긴 할 것 같네요. 알 수 없는 사용자 2018.8.20 15:25

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)