반응형

<Lv.0 대소문자 바꿔서 출력하기>

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

Lv0문제는 몸풀기로 몇개씩 풀고 그 이상난이도 들어가서 훨씬 많이 풀고 있지만

포스팅은 배웠던 기초개념을 상기하는 차원으로 일부만 올리고 있네요

 

이 문제는 유니코드를 알고 있느냐 묻는 문제죠

소문자는 97~122까지가 a~z

대문자는 65~90까지가 A~Z이기 때문에

char라는 형식과 int와 변환이 자유(?)롭다 그리고

소문자와 대문자 유니코드 차이가 32씩 난다 이 세가지를 알고 있으면 됩니다.

 

필자가 소문자 97~122 대문자 65~90을 외우고 있는 것은 아니지만 본적이 있고 해당개념이 있어서 System.out.println(); 을 이용하여 a, z, A, Z를 숫자로 찍어보고 유추했어요 물론 외워두고 알고 있다면 더 좋은 개발자가 되는 것일 수도!

 

다 읽으셨다면 아래 제가 푼 풀이가 바로 이해되실거예요 

 

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();
        String result = "";
        
        for(int i = 0; i < a.length();i++){
            char x = a.charAt(i);
            int y = (int)x;
            
            if (y < 91){
               x = (char)(y + 32);
            } else {
               x = (char)(y - 32);
            }
            result += x;
        }
        System.out.println(result);  
    }
}

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------

 

<코딩 기초 트레이닝 -배열 만들기 5>

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제는 위의 링크를 보시면 됩니다.

 

자르는 것은 substring()

정수화는 당연히 Integer.parseInt()

몇개인지 알 수없기 때문에 List에 add로 쌓아뒀다가

배열로 다시 반환하는데

 

int[] 배열로의 반환은 list.toArray(new int[]) 가 안먹혀서 검색하다가

람다식으로 할 수 있다는 걸 알았지만

 

람다식을 아직 잘 못쓰기 때문에 암기차원에서 포스팅하게되었습니다.

import java.util.*;

class Solution {
    public int[] solution(String[] intStrs, int k, int s, int l) {
        List<Integer> t = new ArrayList();
        
        for(int i = 0 ; i < intStrs.length;i++){
            int a = Integer.parseInt(intStrs[i].substring(s, s + l));
            if(a > k){
                t.add(a);
            }
        }
        int[] answer = t.stream()
                        .mapToInt(Integer::intValue)
                        .toArray();
        return answer;
    }
}

 

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------

<코딩 기초 트레이닝 -문자 개수 세기>

 

문제는 아래 링크에서 보실 수 있습니다.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

이번 포스팅은 코드 블럭내에서 설명드리겠습니다.

 

// 이 문제는 charAt()을 알고 있느냐
// 알파벳이 유니코드임을 알고 있느냐
// 를 묻는 문제죠
// 알파벳이 유니코드라는 개념이 있으면 char로 'a', 'z', 'A', 'Z'
// 를 출력해보고 유니코드를 알아내서 적용해볼 수 있습니다.

class Solution {
    public int[] solution(String my_string) {
        int[] answer = new int[52];
        for(int i = 0 ; i < my_string.length() ; i++){
            
            int a = my_string.charAt(i);
            
            // a - z 는 65~90으로 int로 변환한 후 
            // 65를 빼고 배열에 그대로 적용해도 된다
            if(a >=65 && a <= 90){
                answer[a - 65] += 1;
                
            // A - Z는 97~122으로 int로 변환한 후
            // 97을 빼면 0~25까지 들어가고 여기에
            // 26을 더하면 배열에서 26번 인덱스부터 차곡차곡 들어간다
            } else {
                answer[a - 97 + 26] += 1;
            }
        }
        return answer;
    }
}
 

-----------------------------------------------------------------------------------------------------------------------------------------------------------

 

<코딩 기초 트레이닝 -배열조각하기>

문제는 프로그래머스에 있습니다. 문제링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

몇 개인지 모르면서 순서는 필요할때 List로의 변환 고려

그리고 list의 크기를 정해두고 0부터 ++ 해가면서 remove하면 의도치 않은 오류가 생기기 때문에

remove는 뒤에서 부터 하자!

(앞에서 지워지면 index가 당겨지는 등...) 

import java.util.*;
import java.util.stream.*;

class Solution {
    public int[] solution(int[] arr, int[] query) {  
        List<Integer> a =  Arrays.stream(arr)
                        .boxed()
                        .collect(Collectors.toList());
        
        for(int i = 0 ; i < query.length;i++){
            if(i % 2 == 0){
               for(int j = a.size()-1 ; j > query[i]  ; j--){
                   a.remove(j);
               }      
            } else {
               for(int j = query[i]-1; j >=0   ; j--){
                   a.remove(j);
               } 
            }
        }
        int[] answer = a.stream().mapToInt(Integer::intValue).toArray();
        return answer;
    }
}

 

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------

<코딩 기초 트레이닝 - 문자열 묶기> 

문제 : 

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

 

 

사실상 제가 문제에서 map을 쓰는건 처음이라 포스팅하네요

 

key : value = (원소의 길이) : (해당 길이의 원소 갯수)

로 사용하고자 HashMap을 선언해서 사용했습니다.



더불어 map에서 최댓값을 구하려면 

Collections.max(m.keySet()) : 최댓값의 키값

Collections.max(m.values()) : 최댓값 그자체

을 사용하면 된다는 것을 찾아보게 되었습니다.

 

map의 기본 메소드들은 아시겠지만 혹시 처음 검색해서 유입하신 분들을 위해서 준비했습니다.

 

replace(a, b) : key값 a의 value를 b로 대체한다.

get(a) : key값 a의 value를 리턴한다.

put(a, b) : 해당 맵에 key는 a, value는 b인 노드를 추가한다.

containsKey(a) : key값이 a인 노드가 맵에 존재하는지 여부를 리턴

 

import java.util.*;

class Solution {
    public int solution(String[] strArr) {
        Map<Integer, Integer> m = new HashMap<>();
        
        for(String str : strArr){
            if(m.containsKey(str.length())){
                m.replace(str.length(), m.get(str.length()) + 1);
            } else {
                m.put(str.length(), 1);
            }
            
        }
        // Integer maxKey = Collections.max(m.keySet());
        // 위 주석처리는 최댓값일때 Key값을 찾는 방법이다.
        
        Integer maxValue = Collections.max(m.values());
        
        return maxValue;
    }
}

제가 사용한 것중에 m.replace(str.length(), m.get(str.length()) + 1) 으로 사용한 것의 의미는 

map에 이미 해당원소의 길이로 key값이 존재하면, 그 value를 가져와 + 1 하고 해당 key에 대한 value에 다시 집어넣는다

 

글로만 적으니 난잡하지만....

예를들어

 

str.length()가 1이고 여태까지 길이가 1인 원소의 갯수가 3이라면

str.length = 1, m.get(1) = 3이 될것이고

 

m.replace(str.length(), m.get(str.length()) + 1) 는

 -> m.replace(1, m.get(1) + 1)

 -> m.replace(1, 3 + 1)

-> m.replace(1, 4)

 

으로 key값 1에 해당하는 value가 3에서 4로 바꿔넣을 뿐이다.

따라서 진행 후 m.get(1)을 하게되면 4가 나온다.

 

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------

 

코딩 기초 트레이닝 - 전국 대회 선발 고사

이번 풀이는 keySet()만 사용해와서

entrySet 사용법을 검색하고 처음 써보기 때문에 포스팅하게 되었습니다.

 

참석가능한 친구들만 map에 번호와 등수를 넣은뒤 최솟값을 출력, remove, 다시 최솟값을 받으면 두번째 작은값... 의 방법으로 했습니다. 최솟값일때 key값을 받아서 리턴하는 방식이죠! 그래서 entrySet을 사용

import java.util.*;

class Solution {
    public int solution(int[] rank, boolean[] attendance) {
        int answer = 0;
        
        Map<Integer, Integer> m = new HashMap<Integer, Integer>();
        for(int i = 0 ; i < rank.length;i++){
            if(attendance[i]){
                m.put(i, rank[i]);
            }
        }   
        Integer a = mini(m);
        Integer b = mini(m);
        Integer c = mini(m);

        return 10000 * a + 100 * b + c;
    }
    
    public int mini(Map<Integer, Integer> map){
        int min = 101;
        int result = 0;
        for(Map.Entry<Integer, Integer> entry : map.entrySet()){
            if(entry.getValue() < min){
                min = entry.getValue();
                result = entry.getKey();
            }
        }
        map.remove(result);
        return result;
    }
}
 

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------

< 코딩 기초 트레이닝 - 두수의 합>

 

관련 공부를 해보신 분이라면 아주 쉬운 문제라고 볼 수도 있지만

사용할 일 별로 없을 것 같아서 다른 것들 심화로 공부할때 넘어갔던 BigInteger.....를 인터넷 검색하고 해결하였기 떄문에

포스팅하게되었습니다..

 

 

String 도 BigInteger로 선언해서 변환된다는 것을 배웠네요!

BigInteger도 import 해야 쓸 수 있는지도 다시 상기했네요...  인텔리제이의 노예...ㅋㅋㅋㅋㅋㅋㅋㅋ

import java.math.*; <= BigInteger

import java.math.*;

class Solution {
    public String solution(String a, String b) {
        BigInteger c = new BigInteger(a);
        BigInteger d = new BigInteger(b);        
        return String.valueOf(c.add(d));
    }
}

 

 

 

반응형
반응형
class Solution {
    public int solution(int a, int b, int n) {
        // 빈병 a 개 가져가면 b 개 콜라병 주는 마트
        // n개 가져다 주면 몇개?

        int answer = 0;

        while(n >= a){
            int a1 = ((int)n/a)*b;

            answer += a1;
            n = a1 + n%a;

        }

        return answer;
    }
}

우선 n이 a로 나누어떨어질 경우에는 몫을 리턴값에 추가하는 방식이 간편하다.

n을 몫으로 교체해주면서 반복하면 결과에 바로 다다른다.

 

n이 a로 나누어 떨어지지 않을때가 관건이다. 또한 b의 값이 1만 있지 않기 때문에 어떤 연산을 먼저 할지가 포인트 중 하나이다.

 

while()문의 첫째줄 int를 a로 나눈직후에 변환(버림)한것이 포인트고 나머지가 있다면 다음 연산에 사용될 수 있도록 더해주면 된다.

 

-------------------------------------------------------------------------------------------------------------- -------------------------------------------

문제:

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

이중for문을 쓰면 성능면에서 문제가 많기 때문에 배제하고 하는 방법을 찾다가 고안했습니다.

람다 스트림을 배워야 하는데 아직 기초를 다지려고 기초적인 문법으로 쓰고있어요

import java.util.*;
import java.util.stream.*;

class Solution {
    public String[] solution(String[] players, String[] callings) {
        
        Map<Integer, String> mi = new HashMap<>();
        Map<String, Integer> ms = new HashMap<>();
        
        for(int i = 0 ; i < players.length;i++) {
            mi.put(i, players[i]);
            ms.put(players[i], i);
        }
        
        for(String str : callings){
            int key = ms.get(str);
            mi.replace(key, mi.get(key - 1));
            mi.replace(key - 1, str);
            ms.replace(str, key - 1);
            ms.replace(mi.get(key), key);
        }
        
        for(int i = 0 ; i < mi.size();i++){
            players[i] = mi.get(i);
        }
        
        return players;
    }  
}

적고나서 보니 map을 하나만 써도 됐겠네요 ㅋㅋ... 수련하겠습니다....

 

-------------------------------------------------------------------------------------------------------------- -------------------------------------------

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 요약 : num이 n의 배수이면 1 아니면 0

class Solution {
    public int solution(int num, int n) {
        
        int answer = 0;
        if(num%n==0) answer = 1;
        return answer;
    }
}

-------------------------------------------------------------------------------------------------------------- -------------------------------------------

 

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

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 요약 :  12 $ 3 = 123, 3 $ 12 = 312 방식으로 연산한 것과 두수의 곱 x2 중 큰값을 리턴하는 함수

class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        int x = Integer.parseInt("" + a + b);
        answer = Math.max(x, 2*a*b);
        return answer;
    }
}

""을 앞에 더하면 문자열로 그대로 이어지는 것에 착한하여 String으로 만들었다가 Integer.parseInt로 다시 정수로 만드는 방식을 사용

 

 

 

-------------------------------------------------------------------------------------------------------------- -------------------------------------------

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 요약 :  12 $ 3 = 123, 3 $ 12 = 312 방식 a $ b와 b$ a 중 큰 값 반환

class Solution {
    public int solution(int a, int b) {
        return Math.max(
            Integer.parseInt("" + a + b),
            Integer.parseInt("" + b + a)
        );
    }
}

 

 

 

 

-------------------------------------------------------------------------------------------------------------- -------------------------------------------

 

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제요약 : 문자열을 k번 반복시켜 리턴

class Solution {
    public String solution(String my_string, int k) {
        String answer = "";
        for(int i = 0 ; i < k ; i++){
            answer +=my_string;
        }
        return answer;
    }
}

 

 

 

-------------------------------------------------------------------------------------------------------------- -------------------------------------------

 

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

배열 arr의 원소들을 순서대로 이어붙인 문자열을 리턴

class Solution {
    public String solution(String[] arr) {
        String answer = "";
        for(int i = 0 ; i < arr.length; i++){
            answer += arr[i];
        }
        return answer;
    }
}
반응형
반응형

문제 :

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

class Solution {
	
    public String solution(String[] survey, int[] choices) {
        int minusRplusT = 0;
        int minusCplusF = 0;  
        int minusJplusM = 0;
        int minusAplusN = 0;
               
        for (int i = 0 ; i < survey.length; i++){
            if (survey[i].equals("RT")){
                minusRplusT += choices[i] - 4;          
            } else if (survey[i].equals("TR")){
                minusRplusT += 4 - choices[i];
                   
            } else if (survey[i].equals("CF")){
                minusCplusF += choices[i] - 4;
            } else if (survey[i].equals("FC")){
                minusCplusF += 4 - choices[i];
                   
            } else if (survey[i].equals("JM")){
                minusJplusM += choices[i] - 4;
            } else if (survey[i].equals("MJ")){
                minusJplusM += 4 - choices[i];
                   
            } else if (survey[i].equals("AN")){
                minusAplusN += choices[i] - 4;
            } else if (survey[i].equals("NA")){
                minusAplusN += 4 - choices[i];
            }
        }      
        String answer = "";
        if (minusRplusT > 0 ) answer += "T";
                       else answer += "R";
        if (minusCplusF > 0 ) answer += "F";
                        else answer += "C";
        if (minusJplusM > 0 ) answer += "M";
                        else answer += "J";
        if (minusAplusN > 0 ) answer += "N";
                        else answer += "A";
       
        return answer;
    }
                       
    
}

 

이후에 언젠가 조금 보완한 풀이

class Solution {
	
    public String solution(String[] survey, int[] choices) {
       
        int[] point = {0,0,0,0};
        String[] plus = {"RT", "CF", "JM", "AN"};
        String[] minus = {"TR", "FC", "MJ", "NA"};
               
        for (int i = 0 ; i < survey.length; i++){
            for(int j = 0; j < point.length; j++){        
                if (survey[i].equals(plus[j])){
                    point[j] += choices[i] - 4;          
                } else if (survey[i].equals(minus[j])){
                    point[j] -= choices[i] - 4;  
                }
            }          
        }      
        String answer = "";
        if (point[0] > 0 ) answer += "T";
        else answer += "R";
        if (point[1] > 0 ) answer += "F";
        else answer += "C";
        if (point[2] > 0 ) answer += "M";
        else answer += "J";
        if (point[3] > 0 ) answer += "N";
        else answer += "A";
       
        return answer;
    }
                       
    
}

 

반응형
반응형

백준 20937번 - 자바

 

백준 20937번 - 자바    https://www.acmicpc.net/problem/20937

 

 

20937번: 떡국

Naver D2를 아시나요? D2는 For Developers, By Developers의 약자로, 개발자들을 위해 개발자들이 직접 만들어 가고 있는 네이버 개발자 지원 프로그램입니다. 네이버가 축적한 기술과 지식을 공유하고, 외

www.acmicpc.net

코딩테스트 준비를 위한 연습을 위해 구글 검색하다 찾은 문제

 

풀이는 같은 크기의 그릇은 하나의 탑에 넣을 수 없어 탑을 분리해야한다는 점에서 시작한다.

 

이를 해석해 낼 수 있다면 풀이는 시간복잡도를 최소화하는 방법으로 생각해볼 수 있다.

배열에서 같은 값의 갯수를 각각 세서 그 중에 최대값을 찾는다면 시간복잡도는 어마어마하게 커질 것이다.

O(n^2) 정도로 생각된다. 최악의 경우 어모타이즈드 O(n^3)이 될 수도 있을 것이다.

물론 예제에서는 떡국 그릇의 크기가 그릇의 갯수보다 1/10이므로 O(n^3)보다는 작다고 할 순 있겠다.

 

검색 시간 복잡도가 O(1)인 배열를 이용한 풀이이다. for문을 다 돌기 위해서는 O(n)이 들겠지만 그것으로 풀이가 끝이 난다.

 

// tip: each public class is put in its own file
import java.io.BufferedReader;
import java.util.*;
import java.io.InputStreamReader;

class Ideone {
    // tip: arguments are passed via the field below this editor
    public static void main(String[] args) throws Exception {
    
    	// 주석과 바로 밑 문장은 입력받기 - 하드코딩 관계입니다.
        
        // BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // int N = Integer.parseInt(br.readLine());
        // int[] arr = new int[N];
		// StringTokenizer st = new StringTokenizer(br.readLine());
        // for(int i = 0 ; i < N ; i++){
        //    arr[i] = Integer.parseInt(st.nextToken());
        // }
        
        int[] arr = {1,2,3,1,2,3,2,2,4,1,2,3}; 

        Arrays.sort(arr);
        
        // 바로 아래는 for문은 필요없는문장이지만 배열을 검증해보려고 사용한 문장
        for(int i: arr){
        	System.out.print(i + " ");
        }
        System.out.println();
        //------------------
        
        int currenCount = 0;
        int maxCount = 0;
        
       // for (int i = 0; i < N ; i++) {
       
       for(int i = 0; i < arr.length - 1 ; i++){
            if (arr[i] == arr[i+1]) {
                currenCount++;
                maxCount = Math.max(currenCount, maxCount);
            } else {
                currenCount = 1; 
            }
        }
        System.out.println(maxCount);
    }
}

 

--------------------- --------------------- --------------------- --------------------- --------------------- --------------------- ---------------------

백준 2579번 - 자바

 

https://www.acmicpc.net/problem/2579

 

2579번: 계단 오르기

계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점

www.acmicpc.net

 

오늘 포스팅 한건 여태 2개지만 좀더 많은 문제를 풀어보았다.

깨달은 것은 한계를 정해놓고 잘라써야한다고 생각했던 문제(생각을 글로잘 표현 못한것같습니다...ㅠㅠ)

들이 그저 점화식과 수열의 개념을 이용한 것들이라는 점이다.

 

for문에 진입하면

i까지의 계단 숫자 총합을 sum[i]이라 하고,

마지막 계단을 꼭 밟아야 한다는 조건이 있으므로 

점화식을 마지막 계단인 arr[i]에 도달하기 직전에

두칸을 넘어왔는지 한칸을넘어왔는지에 따라 나누고 최댓값을 구했다.

 

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		int[] arr = {0, 6, 10, 20, 15, 25, 10, 20};
		int[] sum = new int[arr.length];

		sum[0] = 0;
		sum[1] = arr[1];
		
		int one = 0;
		int two = 0;
		for(int i = 3 ; i < arr.length; i++){
			one = sum[i-2] + arr[i];
			two = sum[i-3] + arr[i-1] + arr[i];
			
			sum[i] = Math.max(one, two);
		}
		System.out.println(sum[arr.length-1]); 
	}
}
반응형
반응형

요청사항

string list = "aaa, bbb, ccc";
string list = "aaa, bbb, ccc,  ";
string list = "aaa, bbb,";
string list = "aaa, bbb";

이런식으로 쉼표가 제일 뒤에 찍힐 수도 아닐 수도 있는데,

쉼표 없는 제대로된 나열만 나오게 알고리즘을 만들자.

 

접근법은 일단 세개가 떠오른다.

하나는 split으로 쪼개고 배열의 가장 마지막칸( arr[arr.length - 1] 로 표현할 수 있다)이

trim() 후 공백이면 subString 하는 방법

 

두번째는 subString(list.lastIndexOf(",")) 

설명하자면 가장 마지막 쉼표 다음이 공백이면 그 앞까지만 subString 하는 방법

 

세번째는 split으로 배열로 쪼갠 뒤 배열의 마지막 index의 값이 trim() 후에도 빈칸값이 아니면 "," + arr[index] 를 더하는 방법이다.

 

가장 좋은 방법이라고 할 수는 없겠지만 계속 말로만 적는 것 같아서 세번쨰는 코드로 적어본다.

/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		String list = "aaa,";
		String result = "";
		
		if (list.indexOf(",") > 0){
			String[] arr = list.split(",");
		    	result = arr[0];
		    
		    for (int i = 1 ; i < arr.length ; i++){
		        if(!"".equals(arr[i].trim())){
		            result += "," + arr[i];
		        }
		    }
		    
		} else {			// list = "a"; ( 쉼표가 없는 경우)
			result = list;
		}
		System.out.println(result);
	}
}

여러 경우의 수로 다 해보진 않았지만... aaa, 에서 ,가 떨어져 나간 aaa가 출력된다!

 

list 가 "aaa,bbb,   " 인경우에도 정상적으로 출력됨을 확인 했다.

사실 방법은 이외에도 많을 것이다. 창의적으로 고민해보면 도움이 되지 않을까!

반응형

+ Recent posts