programmers 기초 Day11

Hwani·2024년 6월 11일

프로그래머스 DAY 1~25

목록 보기
37/51

문제 - 문자 개수 세기

풀이

class Solution {
    public int[] solution(String my_string) {
        int[] answer = new int[52];
        
        for (char ch : my_string.toCharArray()) {
            if (ch >= 'A' && ch <= 'Z') {
                answer[ch - 'A']++;
            } else if (ch >= 'a' && ch <= 'z') {
                answer[ch - 'a' + 26]++;
            }
        }

        return answer;
    }
}

ASCII 코드

대문자 (A-Z)

문자ASCII 코드문자ASCII 코드문자ASCII 코드
A65J74S83
B66K75T84
C67L76U85
D68M77V86
E69N78W87
F70O79X88
G71P80Y89
H72Q81Z90
I73R82

소문자 (a-z)

문자ASCII 코드문자ASCII 코드문자ASCII 코드
a97j106s115
b98k107t116
c99l108u117
d100m109v118
e101n110w119
f102o111x120
g103p112y121
h104q113z122
i105r114

설명

해당 문제는 ASCII코드를 이용해 알파벳의 빈도 수를 배열에 나타내는 문제이다.

  • 배열의 크기를 52로 지정해 생성해준다. (앞의 26개는 대문자 A-Z, 뒤에 26개는 소문자 a-z의 빈도수를 나타내는 배열이다.)
  • 매개변수 my_string을 char타입의 배열로 변환한다.
  • ch의 대문자가 A부터 Z사이라면 ch - 'A'에 해당하는 answer[]값을 1 증가시킨다.
    예를 들어 ch가 B라면 66 - 'A', 즉 66 - 65해서 answer[1] 값을 1 증가시킨다.
  • 소문자는 ch가 b라면 98 - 'a', 즉 98 - 97이지만 answer[1]은 대문자의 배열이기때문에 +26을 더한 answer[27]의 값을 증가시킨다.
  • 이후 배열을 리턴한다.

문제 - 배열 만들기 1

풀이

import java.util.*;

class Solution {
    public int[] solution(int n, int k) {
        ArrayList<Integer> list = new ArrayList<>();

        for (int i = 1; i <= n; i++) {
            if (i % k == 0) {
                list.add(i);
            }
        }

        int[] answer = new int[list.size()];

        for (int i = 0; i < list.size(); i++) {
            answer[i] += list.get(i);
        }

        return answer;
    }
}

설명

n과 k의 범위에서 n 이하의 정수 중 k의 배수를 오름차순한 배열을 리턴하는 문제

  • n과 k가 어떻게 주어질지 모르기 때문에 가변적인 ArrayList 생성
  • for문으로 i가 n까지 돌면서 k와 나누어 나머지가 0이라면 k의 배수이기 때문에 그 값을 list에 담아준다.
  • 이후 리턴해야 할 int타입의 배열에 ArrayList에 담긴 값을 추가하여 리턴한다.

문제 - 글자 지우기

풀이

import java.util.*;

class Solution {
    public String solution(String my_string, int[] indices) {
        // Set을 사용하여 indices 배열을 저장
        Set<Integer> indexSet = new HashSet<>();
        for (int index : indices) {
            indexSet.add(index);
        }

        // StringBuilder를 사용하여 결과 문자열을 생성
        StringBuilder answer = new StringBuilder();
        for (int i = 0; i < my_string.length(); i++) {
            if (!indexSet.contains(i)) {
                answer.append(my_string.charAt(i));
            }
        }

        return answer.toString();
    }
}

HashSet이란?

  • 집합 인터페이스를 구현한 클래스
  • 중복을 허용하지 않고, null 값도 허용하며, 요소의 순서를 보장하지 않는다.
  • 해시 테이블을 기반으로 하여, 빠른 검색,추가,제거가 가능하다.

설명

Split을 이용해서 풀 수도 있지만 HashSet을 이용해서 풀면 좀 더 빠르게 찾을 수 있다.

  • HashSet을 생성하고 for문으로 배열의 값을 int index에 저장한다.
  • StringBuilder를 이용해서 매개변수 my_string 값을 순회하면서 indexSet에 포함되지 않은 문자를 answer에 추가하고 리턴한다.

문제 - 카운트 다운

풀이

import java.util.*;

class Solution {
    public List<Integer> solution(int start, int end_num) {
        List<Integer> answer = new ArrayList<>();
        
        // start_num부터 end_num까지 1씩 감소하며 리스트에 추가
        for (int i = start; i >= end_num; i--) {
            answer.add(i);
        }
        
        return answer;
    }
}

문제 - 가까운 1 찾기

풀이

class Solution {
    public int solution(int[] arr, int idx) {
        int answer = 0;
        
        for (int i = 0; i < arr.length; i++) {
            if (i >= idx && arr[i] == 1) {
                answer = i;
                break;
            } else {
                answer = -1;
            }
        }
        
        return answer;
    }
}
profile
개발자될거야

0개의 댓글