반응형

<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));
    }
}

 

 

 

반응형

+ Recent posts