웅쓰뚱쓰
웅쓰의 IT
웅쓰뚱쓰
  • 분류 전체보기 (127)
    • 프로그래밍 (31)
      • 자료구조&알고리즘 (12)
      • Django (1)
      • NAS (3)
      • python (1)
      • Java (2)
      • Kotlin (0)
      • 안드로이드 (0)
      • 백준 (6)
      • 프로그래머스 (1)
      • 블록체인 (4)
    • IT (57)
      • 스마트폰 (30)
      • 모바일 (3)
      • 기타제품 (9)
      • 기타기술 (10)
      • 소식 (5)
    • 꿀팁 (1)
      • 윈도우10 (1)
    • 리얼후기 (4)
      • 제품리뷰 (2)
      • 일상리뷰 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 앱 만들기
  • 블랙프라이데이
  • 블록체인
  • vr
  • 안드로이드 스튜디오
  • 삼성
  • 동적배열
  • 백준
  • LG
  • 폴더블폰
  • 아마존
  • 안드로이드
  • 화웨이
  • 패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #Android앱개발올인원패키지Online
  • 이더리움

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
웅쓰뚱쓰

웅쓰의 IT

프로그래머스 숫자 짝꿍 with 자바
프로그래밍/프로그래머스

프로그래머스 숫자 짝꿍 with 자바

2022. 11. 23. 12:00


https://school.programmers.co.kr/learn/courses/30/lessons/131128

풀이

X와 Y가 가지고 있는 숫자들 중에서 중복된 숫자들만 찾으면 된다

우선 X를 한 글자씩 돌면서, 해당 숫자를 카운트 해준다

int[] count = new int[10];          // X가 가지고 있는 숫자 담을 배열

// X의 숫자 카운트
for (int i = 0; i < X.length(); i++) {
    char c = X.charAt(i);
    int n = c - '0';
    count[n]++;
}

 

그 후, Y를 한 글자씩 돌면서, 해당 숫자를 X가 가지고 있는지 확인하고

X가 가지고 있다면, 카운트에서 값을 하나 빼준다

이러면 X와 Y가 중복으로 가지고 있는 숫자임을 찾은 셈이므로

중복으로 가지고 있는 숫자를 다른 카운트 배열에 저장해준다

int[] answer_count = new int[10];   // X와 Y가 가지고 있는 숫자 담을 배열

// Y가 X가 가지고 있는 숫자 가지고 있는지 카운트
for (int i = 0; i < Y.length(); i++) {
    char c = Y.charAt(i);
    int n = c - '0';
    if (count[n] > 0) {
        count[n]--;
        answer_count[n]++;
    }
}

 

이제 중복을 가지고 있는 카운트 배열의 맨 뒤에서 부터

해당 숫자가 카운트 되어 있다면 String에 하나씩 추가해 주면서

카운트가 0이 될때까지 빼주면 된다

StringBuilder sb = new StringBuilder();

// 카운트 배열에서 숫자 빼냄
for (int i = 9; i >= 0; i--) {
    while (answer_count[i] > 0) {
        sb.append(i);
        answer_count[i]--;
    }
}

 

마지막으로 예외처리를 해준다

아무 중복 숫자가 없는 경우는 answer의 길이가 0인 경우이고

중복 숫자가 0뿐인 경우는 answer의 맨 앞자리가 0인 경우이다

answer = sb.toString();

// 예외처리
if (answer.length() == 0) {
    answer = "-1";
} else if (answer.charAt(0) == '0') answer = "0";

 


 

전체 코드

class Solution {

        int[] count = new int[10];          // X가 가지고 있는 숫자 담을 배열
        int[] answer_count = new int[10];   // X와 Y가 가지고 있는 숫자 담을 배열

        public String solution(String X, String Y) {
            String answer = "";
            StringBuilder sb = new StringBuilder();

            // X의 숫자 카운트
            for (int i = 0; i < X.length(); i++) {
                char c = X.charAt(i);
                int n = c - '0';
                count[n]++;
            }

            // Y가 X가 가지고 있는 숫자 가지고 있는지 카운트
            for (int i = 0; i < Y.length(); i++) {
                char c = Y.charAt(i);
                int n = c - '0';
                if (count[n] > 0) {
                    count[n]--;
                    answer_count[n]++;
                }
            }

            // 카운트 배열에서 숫자 빼냄
            for (int i = 9; i >= 0; i--) {
                while (answer_count[i] > 0) {
                    sb.append(i);
                    answer_count[i]--;
                }
            }

            answer = sb.toString();

            // 예외처리
            if (answer.length() == 0) {
                answer = "-1";
            } else if (answer.charAt(0) == '0') answer = "0";

            return answer;
        }
    }
    웅쓰뚱쓰
    웅쓰뚱쓰

    티스토리툴바