본문 바로가기
일지/취준일기

2024_11_27 취준일기 6일차

by 알케니브 2024. 11. 27.

오늘의 계획

1. 코드 공부

내용:  bsHive 강의현황 수정 만들기(와중) => git에 올리기 완료

 


2. 프로그래머스 코딩 테스트

문제1. 

길이가 같은 두 문자열 str1과 str2가 주어집니다.

두 문자열의 각 문자가 앞에서부터 서로 번갈아가면서 한 번씩 등장하는 문자열을 만들어 return 하는 solution 함수를 완성해 주세요.

제한사항

  • 1 ≤ str1의 길이 = str2의 길이 ≤ 10
  • str1과 str2는 알파벳 소문자로 이루어진 문자열입니다

입출력 예

str1 str2 result
"aaaaa" "bbbbb" "ababababab"
class Solution {
    public String solution(String str1, String str2) {
        String answer = "";
        return answer;
    }
}

 

풀이과정

이것도 charAt를 써야하나..? 하다가 전에 그 이상한 문제에서 썼던 substring 가 생각남

str1.substring();
        str2.substring();

여기까지 일단 써놓고 어떻게 교차하면서 나오게하나...하다가 for문 돌리나..? 함 근데 저거랑 어떻게 버무리는거지... 하고 고민하다가 결국 구글링함

 

정답

class Solution {
    public String solution(String str1, String str2) {
        String answer = "";
        
        for(int i = 0; i < str1.length(); i++) {
            answer += str1.substring(i,i+1);
            answer += str2.substring(i,i+1);
        }
        
        return answer;
    }
}

기초적인것 같은데 정답을 봐도 아리까리...해서 풀이과정 하나하나 뜯어봄

 

  1. for문에서 i는 0부터 시작하여  str1의 길이 전까지 반복된다. 두 문자열의 길이가 같으므로 반복횟수는 두 문자열의 길이와 동일하다
  2. str1.substring(i, i + 1)은 str1의 i번째 문자를 가져온다. str2 이하도 마찬가지.
  3. 각 문자를 answer에 더한다. 이후 +=로 인해 기존 문자열에 새로운 문자열을 추가하는 역할을 한다
  4. for문의 반복이 끝나면 answer을 return한다

ex) 반복과정( str1="abc"; str2="123";이라 가정할 때)

  1. i = 0
    • answer += str1.substring(0, 1) → answer = "a"
    • answer += str2.substring(0, 1) → answer = "a1"
  2. i = 1
    • answer += str1.substring(1, 2) → answer = "a1b"
    • answer += str2.substring(1, 2) → answer = "a1b2"
  3. i = 2
    • answer += str1.substring(2, 3) → answer = "a1b2c"
    • answer += str2.substring(2, 3) → answer = "a1b2c3"

answer = "a1b2c3"

 

++ 다른사람의 풀이

 for(int i = 0; i < str1.length(); i++){
            answer+= str1.charAt(i);
            answer+= str2.charAt(i);
        }

내가 짜고싶었던게 이 코드였다! charAt를 사용하여 for문 사용하는 법. 메모메모

 

class Solution {
    public String solution(String str1, String str2) {
        char[] chars1 = str1.toCharArray();
        char[] chars2 = str2.toCharArray();

        StringBuilder sb = new StringBuilder();
        for (int i=0; i<chars1.length; i++) {
            sb.append(chars1[i]).append(chars2[i]);
        }

        return sb.toString();
    }
}

append 함수를 사용한 사람도 보였다. 이전 문제 풀이에서도 다른 사람들이 쓰던건데 이 참에 제대로 알고 가야겠다

↳ append: 문자열 끝에 문자열을 추가할 수 있도록 하는 함수

StringBuffer 클래스에서는 문자열 끝에 문자열을 추가할 수 있는 함수를 제공합니다.

append 함수는 문자열 끝에 문자열을 추가합니다.

인자는 문자 혹은 문자열이고 반환값은 StringBuffer 입니다.

 


 

문제2.
문자들이 담겨있는 배열 arr가 주어집니다. arr의 원소들을 순서대로 이어 붙인 문자열을 return 하는 solution함수를 작성해 주세요.

제한사항: 1 ≤ arr의 길이 ≤ 200, arr의 원소는 전부 알파벳 소문자로 이루어진 길이가 1인 문자열입니다.

 

입출력 예

arr result
["a", "b", "c"] "abc"
class Solution {
    public String solution(String[] arr) {
        String answer = "";
        return answer;
    }
}

 

풀이과정

설마 애도 for문인가.... 진짜 반복문파티. 게다가 내가 싫어하는 배열문제...

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

왜 안되지..? 했는데 내 고질병 또 나옴. int i = 0이라고 적어야하는데 자꾸 int를 안적는다ㅋㅋㅋ

 

정답

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

 

++ 다른사람의 풀이

class Solution {
    public String solution(String[] arr) {
        return String.join("", arr);
    }
}

헐 이게 뭐람. 이게 가능한건가??

join함수를 찾아보니 split 함수와 반대되는 개념으로 배열을 문자열을 만드는 함수라고 한다

한 줄로 끝나는게 너무 깔끔하고 멋있다

 

class Solution {
    public String solution(String[] arr) {
        String answer = "";

        for(String a : arr) {
            answer += a;
        }

        return answer;
    }
}

내가 낸 답과 비슷하지만 좀 더 간단해보이는 버전도 있었다


문제3.

문자열 my_string과 정수 k가 주어질 때, my_string을 k번 반복한 문자열을 return 하는 solution 함수를 작성해 주세요.

제한사항:

  • 1 ≤ my_string의 길이 ≤ 100
  • my_string 은 영소문자로만 이루어져 있습니다
  • 1 ≤ k ≤ 100

입출력 예

my_string k result
"string" 3 "stringstringstring"
"love" 10 "lovelovelovelovelovelovelovelovelovelove"
  • 입출력 예 #1: 예제 1번의 my_string은 "string"이고 이를 3번 반복한 문자열은 "stringstringstring"이므로 이를 return 합니다.
  • 입출력 예 #2: 예제 2번의 my_string은 "love"이고 이를 10번 반복한 문자열은 "lovelovelovelovelovelovelovelovelovelove"이므로 이를 return 합니다.
class Solution {
    public String solution(String my_string, int k) {
        String answer = "";
        return answer;
    }
}



풀이과정

:

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

또반복문~~ 여기까지 작성했는데 answer부터 무언가 아니라는 건 알겠다. 뭘까하다가 찾아보니 너무 간단했음. 복잡하게 생각할거 없었다

 

정답

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

++ 다른사람의 풀이

class Solution {
    public String solution(String my_string, int k) {
        return my_string.repeat(k);
    }
}

 


문제4.

연산 ⊕는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다. 예를 들면 다음과 같습니다.

  • 12 ⊕ 3 =123
  • 3 ⊕ 12 = 312

양의 정수 a와 b가 주어졌을 때, a ⊕ b와 b ⊕ a 중 더 큰 값을 return 하는 solution 함수를 완성해 주세요.

단, a ⊕ b와 b ⊕ a가 같다면 a ⊕ b를 return 합니다.

 

제한사항: 1 ≤ a, b < 10,000

입출력 예

a b result
9 91 991
98 8 898
  • 입출력 예 #1: a ⊕ b = 991 이고, b ⊕ a = 919 입니다. 둘 중 더 큰 값은 991 이므로 991을 return 합니다.
  • 입출력 예 #1: a ⊕ b = 898 이고, b ⊕ a = 889 입니다. 둘 중 더 큰 값은 898 이므로 898을 return 합니다.
class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        return answer;
    }
}

 

풀이과정

:

class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        
        if (ab ≥ ba) {
            answer = ab;
        } else {
            answer = ba;
       
        
        return answer;
    }
}

라고 했는데 저 부등호가 안먹힌다고 해서 고쳐봄

class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        
        if (ab > ba) {
            answer = ab;
        } else if (ab < ba) {
            answer = ba;
        } else
            answer = ab;
        
        return answer;
    }
}

그래도 안됐다. ab랑 ba를 선언을 안해서 그런가..?

class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        
        int ab = "a" + "b";
        int ba = "b" + "a";
            
        if (ab > ba) {
            answer = ab;
        } else if (ab < ba) {
            answer = ba;
        } else
            answer = ab;
        
        return answer;
    }
}

그래도 안됐다 아나~~!!! 결국 검색해봤는데 int여서 그런듯. String로 변환해야겠다

class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        
        String A = Integer.toString(a);
        String B = Integer.toString(b);
        
        if (AB > BA) {
            answer = AB;
        } else if (AB < BA) {
            answer = BA;
        } else
            answer = AB;
        
        return answer;
    }
}

응 안돼... 구글링을 더 해서 힌트를 엿본 결과 valueOf()함수를 사용했다. String로 변환시키는 함수로 내가 찾던것!

이렇게 String로 변환해서 선언을 해주고나서, int로 값을 비교할수 있도록 다시 변환을 시켜주고 사용하면 되는거였다.

부등호도 특수기호를 쓰는게 아니라 >=라고 쓰면 먹히는 거였다

 

정답

class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        
        String ab = String.valueOf(a) + String.valueOf(b);
        String ba = String.valueOf(b) + String.valueOf(a);
        
        int abVal = Integer.parseInt(ab);
        int baVal = Integer.parseInt(ba);
        
        if (abVal >= baVal) {
            answer = abVal;
            
        } else {
            answer = baVal;
        }
        return answer;
    }
}

 

++ 다른사람의 풀이

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

한줄안에 끝내다니 대박...


문제5.

연산 ⊕는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다. 예를 들면 다음과 같습니다.

  • 12 ⊕ 3 = 123
  • 3 ⊕ 12 = 312

양의 정수 a와 b가 주어졌을 때, a ⊕ b와 2 * a * b 중 더 큰 값을 return하는 solution 함수를 완성해 주세요.

단, a ⊕ b와 2 * a * b가 같으면 a ⊕ b를 return 합니다.

 

제한사항: 1 ≤ ab < 10,000

입출력 예

a b result
2 91 364
91 2 912
  • 입출력 예 #1: a ⊕ b = 291 이고, 2 * a * b = 364 입니다. 둘 중 더 큰 값은 364 이므로 364를 return 합니다.
  • 입출력 예 #2: a ⊕ b = 912 이고, 2 * a * b = 364 입니다. 둘 중 더 큰 값은 912 이므로 912를 return 합니다.
class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        return answer;
    }
}



풀이과정

: 오잉 위의 문제 연장선 아닌가? ab를 valueOf를 사용하여 String으로 변환하고 다시 parseInt해서 int로 변환하는것 까지는 같았다. 더하여, 2*a*b를 선언하는 함수까지 만들어서 비교하여 풀었다

 

정답

class Solution {
    public int solution(int a, int b) {
        int answer = 0;
        
        String ab = String.valueOf(a) + String.valueOf(b);
        String eab = String.valueOf(2*a*b);
        
        int abVal = Integer.parseInt(ab);
        int eabVal = Integer.parseInt(eab);
        
        if (abVal >= eabVal) {
            answer = abVal;
            
        } else {
            answer = eabVal;
            
        }
        
        return answer;
    }
}

 

++ 다른사람의 풀이

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

아까 그 한줄로 쓴 사람인가 이거 써본다고 하고 깜빡함ㅋㅋㅋ 다른 답변들도 보니까 Math 함수를 많이 쓰는것같다


3. 이력서/지원/면접 준비 활동

'일지 > 취준일기' 카테고리의 다른 글

2024_11_29 취준일기 8일차  (0) 2024.11.29
2024_11_28 취준일기 7일차  (0) 2024.11.28
2024_11_25 취준일기 4일차  (0) 2024.11.25
2024_11_22 취준일기 3일차  (1) 2024.11.22
2024_11_21 취준일기 2일차  (0) 2024.11.21