[Java] 프로그래머스 문제1 고찰

이지원·2024년 5월 2일
4

Java Coding Study

목록 보기
1/4

풀었던 문제 중에 다시 생각해 볼만한 문제에 대한 고찰

가장 많이 받은 선물 (2024 KAKAO WINTER INTERSHIP)

  • 문제 설명
    입력은 Sring배열 두개를 입력 받으며 첫 번째 배열에는 friends 즉, 선물을 주고 받은 사람들의 이름이 담긴 배열이다. 두 번째 배열은 gifts 즉, 준 사람과 받은 사람이 담긴 사람이 한 문자열에 담긴 배열이다.
    간단하게 문제를 설명하면 다음 달에 누가 선물을 많이 받을지 리턴하는 문제이고, 이는 이번 달에 선물을 주고 받은것이 관계가 있다.

  • 내가 풀었던 풀이

    • 입력값 전처리

      • 2차원 배열 arr 선언
      • 입력받은 gifts String 배열 처리
      • 위에서 처리한 준 사람과 받은 사람을 이용해서 arr 배열 처리
      • 한 사람이 주고 받은 횟수를 나타낸 선물 지수 배열 선언 및 처리
    • 로직 구현

      • monthGift 다음 달 받을 선물을 저장하는 배열을 선언한 후 비교하며 monthGift배열 증감
        일단 각 사람들끼리 준 횟수와 받은 횟수를 비교 후 준 횟수가 많은 사람에게 monthGift배열에 증감, 둘이 같으면 위에서 처리한 선물 지수를 통해 비교 후 더 선물지수가 높은 사람에게 monthGift 증감하도록 구현
    • 결과값 리턴

      • for문을 이용해서 배열의 최댓값 구하기

  • 내 풀이에 대한 고찰

    • 데이터 전처리
      데이터 전처리 하는데 있어서 이 문제를 풀 당시에는 Map을 몰랐기 때문에 배열만을 이용하여 풀려고 하다 보니 arr 2차원 배열의 증감을 할 때 일일히 for문을 통해 비교하고 equals 함수를 통해 비교하는 것이 낭비라고 생각하여 데이터 전처리 부분을 수정하였습니다.
      또한 선물지수도 굳이 for 문을 한 개 더 써서 따로 계산하는 것이 아닌 위의 arr 2차원 배열 증감에서 같이 수행할 수 있을 것 같아 이 부분 또한 추가로 수정하였습니다.
      위의 과정들을 통해 데이터 전처리 부분에 있어서 상당히 코드를 줄여 복잡성을 낮출 수 있었고 인덱스 번호가 자주 필요할 때에는 이를 배열에서 for문으로 찾는 것 보다는 Map으로 키와 값을 저장 후 필요할 때 값을 얻어 쓰는 것이 더 구조적으로 단순화 시킬 수 있겠다고 생각하였습니다.


  • 실행 시간 비교
    (수정 전)
    (수정 후) Map을 이용하여 for문을 줄인 것도 실행시간 단축에 도움이 되었다고 생각하지만 더욱 큰 이유는 굳이 선물지수를 구할 때 for문을 따로 다시 하는 것이 아닌 arr 배열 증감할 때 같이 계산한 것이 큰 이유일 것이라고 생각하였고 중복되는 부분에 주의하며 코딩해야 겠다고 느꼈다.

    전체 소스 코드 : https://github.com/Vryez11/JVCS

profile
백엔드 개발자취

0개의 댓글