<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));
}
}
'language & Framework > Java' 카테고리의 다른 글
[자바] 프로그래머스 lv.1 빈병 콜라 문제, lv.1 달리기경주, lv.0 다수 (0) | 2023.04.20 |
---|---|
[자바][프로그래머스] 2022 KAKAO TECH INTERNSHIP - 성격 유형 검사하기 (글쓴이가 푼 방법) (1) | 2023.04.16 |
[자바] 백준 20937번 / 백준 2579번 (0) | 2023.04.13 |
[자바] 완전 기초 - 쉼표로 이루어진 문자열 중 빈값 제거 (0) | 2023.04.11 |