백준 10814 : String[][] vs Class

Kim Dong Kyun·2023년 5월 30일
1

썸네일 출처

문제 링크

풀이 1 - String[][] 이중배열

String[][] 이중배열을 이용해서 Array.sort 하는 방법

// String[][] 사용한 풀이
        public static void main0(String[] args) {

            Scanner sc = new Scanner(System.in);

            int N = sc.nextInt();
            String[][] arr = new String[N][2];


            for(int i = 0; i < N; i++) {
                arr[i][0] = sc.next();	// 나이
                arr[i][1] = sc.next();	// 이름
            }


            Arrays.sort(arr, new Comparator<String[]>() {
                // 나이순으로 정렬
                @Override
                public int compare(String[] s1, String[] s2) {
                    return Integer.parseInt(s1[0]) - Integer.parseInt(s2[0]);
                }

            });

            for(int i = 0; i < N; i++) {
                System.out.println(arr[i][0] + " " + arr[i][1]);
            }
        }
  • 간단하고, 단순한 풀이
  • 처음에는 Map으로 할까? 생각했지만 Map은 정렬이 불가능하다

풀이2 - 객체 이용

Member 객체를 선언 후 사용

public void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            Member[] members = new Member[n];

            for (int i = 0; i < n; i++) {
                int age = sc.nextInt();
                String name = sc.next();
                members[i] = new Member(age, name);
            }

            Arrays.sort(members, new Comparator<Member>() {
                @Override
                public int compare(Member m1, Member m2) {
                    return Integer.compare(m1.getAge(), m2.getAge());
                }
            });

            for (Member member : members) {
                System.out.println(member.getAge() + " " + member.getName());
            }
        }
    }

    class Member {
        private int age;
        private String name;

        public Member(int age, String name) {
            this.age = age;
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public String getName() {
            return name;
        }
    }
  • 객체를 선언 후 풀이
  • age, name 이외의 더 다른 필드가 들어와도 객체 타입으로 선언 후 비교가 가능하다
  • 객체지향!!!

느낀 점 : 예쁜 풀이는 힘들다. 그러나 자바로 알고리즘 푸는 이유가 있어야 할 듯. 최대한 객체 지향, 기능별로 조그맣게 나눠서 풀자

0개의 댓글