[코딩테스트 합격자 되기(Java)] 문제 50. 계수정렬 구현하기★

2024. 12. 9. 09:00·코딩 테스트 정복기/기타
반응형

문제

인자로 받은 문자열s를 계수정렬로 정렬하여 반환하는 solution() 함수를 구현하세요.

 

제약조건

• string `s`의 길이는 1 이상 10,000 이하입니다. 

• `s`는 알파벳 소문자로 이루어져 있습니다.

 

 

입출력 예

s return
hello ehllo
algorithm aghilmort

 

 

풀이 & 코드

계수 정렬 또는 카운팅 소트(counting sort):
컴퓨터 과학에서 정렬 알고리즘의 하나로서, 작은 양의 정수들인 키에 따라 객체를 수집하는 것.

쉽게 말하자면, 정렬된 어떠한 키에따라 빈도를 저장하는 정렬 알고리즘이다. 시간복잡도는 `O(n)`

때문에 키가되는 숫자를 알고있어야 하고, 키의 범위가 너무 크지 않아야한다.

 

위 문제에서는 a~z를 키로하고, String s에 나오는 문자의 빈도를 계산하면 된다.

 

1. 알파벳 소문자 개수만큼의 크기를 가진 배열을 생성한다 `arr = new int[26]`

 

2. s를 앞에서부터 순회하면서 `arr[문자에 맞는 index]`를 1씩 증가시킨다.

 

3.  arr 을 순회하면서 `index에 맞는 문자`를 나온 횟수만큼 출력한다.

 

문자에 맞는 index, index에 맞는 문자를 찾는 것은 쉽다.

index 0 이 a이고, 문자 `char`는 연산이 가능하므로,

`index  = 문자 - 'a'`

`문자 찾기 = index+'a'`

 

 

class Solution{
    String solution(String str){
        int[] arr = new int[26]; // a~z까지 빈도를 저장하는 배열
        for (int i = 0; i < str.length(); i++) {
            arr[str.charAt(i) - 'a']++;
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 26; i++) {
            for(int j = 0; j < arr[i]; j++) sb.append((char)(i + 'a'));
        }
        return sb.toString();
    }
}

 

 

문제 답안 바로가기

 

codingtest_java/solution/50.java at main · retrogemHK/codingtest_java

코딩테스트 합격자 되기(자바편). Contribute to retrogemHK/codingtest_java development by creating an account on GitHub.

github.com

 

 

 

728x90
반응형

'코딩 테스트 정복기 > 기타' 카테고리의 다른 글

[코딩테스트 합격자 되기(Java)] 문제 69. 조약돌 문제★ ★ ★  (0) 2025.01.05
[코딩테스트 합격자 되기(Java)] 문제 68. LIS길이계산하기★ ★ ★  (0) 2025.01.03
[코딩테스트 합격자 되기(Java)] 문제 51. 정렬이 완료된 두 배열 합치기★  (2) 2024.12.10
[코딩테스트 합격자 되기(Java)] 문제 44.스도쿠 퍼즐★★★  (0) 2024.11.28
[코딩테스트 합격자 되기(Java)] 문제 43.1부터 N까지 숫자 중 합이 10이 되는 조합 구하기★  (0) 2024.11.27
'코딩 테스트 정복기/기타' 카테고리의 다른 글
  • [코딩테스트 합격자 되기(Java)] 문제 68. LIS길이계산하기★ ★ ★
  • [코딩테스트 합격자 되기(Java)] 문제 51. 정렬이 완료된 두 배열 합치기★
  • [코딩테스트 합격자 되기(Java)] 문제 44.스도쿠 퍼즐★★★
  • [코딩테스트 합격자 되기(Java)] 문제 43.1부터 N까지 숫자 중 합이 10이 되는 조합 구하기★
settong
settong
    250x250
  • settong
    개 발 자 국
    settong
  • 전체
    오늘
    어제
    • 전체보기 (202)
      • Computer Science (50)
        • Network (7)
        • Operating System (18)
        • Data Structure (9)
        • Database (11)
        • Algorithm (5)
      • Language (17)
        • Java (17)
        • Javascript (0)
        • Python (0)
      • Devops (20)
        • AWS (0)
        • Naver Cloud (16)
        • CICD (3)
        • 웹 서버 관리 (1)
      • Front (0)
        • React (0)
      • Backend (5)
        • Spring (5)
      • 코딩 테스트 정복기 (110)
        • 백준 (51)
        • 프로그래머스 (53)
        • 기타 (6)
      • etc (0)
      • 경제 상식 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Spring Boot
    ncp202
    백준
    BFS
    프로그래머스
    CI/CD
    github actions
    벨만포드
    다익스트라
    다이나믹프로그래밍
    해시
    분할정복
    DFS
    백트래킹
    ncp200
    Network
    완전탐색
    ncp
    집합
    lcs
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
settong
[코딩테스트 합격자 되기(Java)] 문제 50. 계수정렬 구현하기★
상단으로

티스토리툴바