리스트(배열)

2dean·2023년 7월 6일
0

Algorithm

목록 보기
13/17
post-thumbnail

문제 : 문자 개수 세기

알파벳 대소문자로만 이루어진 문자열 my_string이 주어질 때, my_string에서 'A'의 개수, my_string에서 'B'의 개수,..., my_string에서 'Z'의 개수, my_string에서 'a'의 개수, my_string에서 'b'의 개수,..., my_string에서 'z'의 개수를 순서대로 담은 길이 52의 정수 배열을 return 하는 solution 함수를 작성해 주세요.

입출력 예

my_stringresult
"Programmers"[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0]

풀이

풀이과정

알파벳은 문자 그대로 사용될 수도 있고, ASCII (American Standard Code for Information Interchange) 또는 유니코드 표준에 따라 숫자로 표현될 수도 있다.
대문자 'A'는 ASCII 코드에서 65로 표현되고,
소문자 'a'는 97로 표현된다.

class Solution {
    public int[] solution(String my_string) {
      int[] answer = new int[52];

        for(char str : my_string.toCharArray()){
            if(str >= 'A' && str<= 'Z') { // 대문자일경우
                int index = str - 'A';
                answer[index]++;
            } else if (str >= 'a' && str<= 'z') { 
            //소문자일 경우, 27번 부터 시작이므로 26을 더함
                int index = str - 'a' + 26;
                answer[index]++;
            }
        }

        return answer;
    }
}

문제 : 글자 지우기

문자열 my_string과 정수 배열 indices가 주어질 때, my_string에서 indices의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.

입출력 예

my_stringindicesresult
"apporoograpemmemprs"[1, 16, 6, 15, 0, 10, 11, 3]"programmers"

풀이

오답

    static String solution(String my_string, int[] indices) {
        List<Character> list = new ArrayList<>();

        char[] charArray = my_string.toCharArray();

        for (int i=0; i<charArray.length; i++) {
            list.add(charArray[i]);
        }
        for (int j=0; j<indices.length; j++){
            ** list.remove(indices[j]); ** 틀림!
        }
        StringBuilder result = new StringBuilder();
        System.out.println("list : " + list.toString());
        for (int i=0; i<list.size(); i++) {
            result.append(list.get(i));
        }

        return result.toString();
    }

이렇게 풀었더니 결과가 이상했다.
list : [p, o, r, o, r, a, p, e, m, e, p]
??!

틀린 점

list.remove(indices[j]) 에서 리스트의 원소를 삭제한 후에 인덱스가 변경되므로, 올바르게 동작하지 않는다. 이로 인해 잘못된 문자가 삭제되고 결과가 이상하게 나타났음!

정답(?)!

삭제할 문자열을 건너뛰고 새로운문자열을 만들었다

import java.util.ArrayList;
import java.util.List;


class Solution {
    public String solution(String my_string, int[] indices) {
         List<Character> list = new ArrayList<>();

        StringBuilder result = new StringBuilder();
        char[] charArray = my_string.toCharArray();


        for (int i=0; i<charArray.length; i++) {
            boolean removeChar = false;
            for (int index : indices) {
                if (index == i) {
                    removeChar = true;
                    break;
                }
            }
            if (!removeChar) {
                result.append(charArray[i]);
            }
        }

        return result.toString();
    }
}
profile
냅다 써보는 공부의 흔적😇

0개의 댓글