컴공생의 발자취

프로그래머스(가운데 글자 가져오기 및 콜라 문제) 본문

💡 코테

프로그래머스(가운데 글자 가져오기 및 콜라 문제)

MNY 2024. 4. 11. 23:04
728x90
반응형
💡 오늘의 학습 키워드

- 프로그래머스
    * 가운데 글자 가져오기 : 비기너 문제
    * 콜라 문제 : 미들러 문제

 

오늘의 회고

문제1  : [가운데 글자 가져오기]

  • 어떤 문제가 있었고, 나는 어떤 시도를 했는지

문자열의 중간 문자를 가져오는 문제이다. 문자열의 길이가 짝수라면 중간에 있는 2개의 문자를 홀수라면 중간에 있는 1개의 문자를 가져온다.

 

짝수일 때랑 홀수일 때를 나눠서 짝수라면 중간에 2개 인덱스의 문자를 가져오고

홀수라면 중간에 1개 인덱스의 문자를 가져오도록 했다.

그리고 StringBuilder을 사용 후 String으로 변환 후 리턴해줬다.

 

 

프로그래머스

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

programmers.co.kr

 

  • 어떻게 해결했는지
class Solution {
    public String solution(String s) {
        StringBuilder sb = new StringBuilder();
        String answer = "";
        int len = s.length();
        
        if (len % 2 == 0) {
            sb.append(s.charAt(s.length()/2 - 1));
            sb.append(s.charAt(s.length()/2));
        }
        else {
            sb.append(s.charAt(s.length()/2));
        }
        answer = sb.toString();
        return answer;
    }
}

 

문제2  : [콜라 문제]

  • 어떤 문제가 있었고, 나는 어떤 시도를 했는지

a개의 빈병이 있다면 b개의 새로운 콜라로 바꿔준다. 내가 가진 빈병이 n개라면 총 몇 개의 새로운 콜라로 바꿀 수 있는지를 세어보는 문제이다.

 

만약 빈병 a개로 내가 가진 빈병(n)을 나누었을 때 나머지가 존재할 수 있기에 나머지를 따로 구해서 남는 병으로 저장해주고

새로 받은 콜라는 내가 가진 빈병(n)을 빈병 a개로 나눈 몫에 새로운 콜라(b)를 곱한 것이므로 이를 새로 받은 콜라를 더하여 값을 가지고 있게 한다.

그리고 현재 내가 가진 빈병(n)은 내가 가진 빈병(n)을 빈병 a개로 나눈 것에 새로운 콜라(b)를 곱하고 앞서 구했던 남는 병을 더해준다.

이러한 과정을 내가 가진 빈병(n)이 빈병 a개 보다 크거나 같다면 반복시켜준다.

 

이 과정을 통해 한 번에 통과할 수 있었다.

 

 

프로그래머스

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

programmers.co.kr

 

  • 어떻게 해결했는지
// input : 빈병(int a), 새로운 콜라(int b), 내가 가진 빈병(int n)
// variable : 새로 받은 콜라(int answer)
            // 남는 병(int temp)

/* process
내가 가진 빈병이 빈병보다 크거나 같으면 반복
    남는 병 = 내가 가진 빈병 % 빈병
    새로 받은 콜라 += (내가 가진 빈병 / 빈병) * 새로운 콜라
    내가 가진 빈병 = (내가 가진 빈병 / 빈병) * 새로운 콜라 + 남는 병

*/

// result : 내가 가진 빈병으로 교환했을 때 새로운 콜라병 수

class Solution {
    public int solution(int a, int b, int n) {
        int answer = 0;
        int temp = 0;
        
        while (n >= a) {
            temp = n % a;
            answer += (n / a) * b;
            n = (n / a) * b + temp;
        }
        
        return answer;
    }
}

 

  • 무엇을 새롭게 알았는지

나는 자바를 선택했지만, 파이썬 비기너분의 풀이 과정을 보면서 콜라문제를 재귀를 사용해서 푸신 것을 보았다.

재귀는 내가 약한 부분이기에 조금 어렵게 느껴지기는 했다. 그리고 재귀로 풀 수도 있다는 생각을 해보지 못해 놀라웠다.

 

내배캠에서 진행하는 미니 프로젝트를 하며 깃허브의 이슈에 대해 새롭게 알게 되었다. 아직 어떻게 잘 사용하는지는 모르지만, 조금 더 알아봐야겠다. 공부하고 알아볼게 너무 많다...

 

내일 학습할 것은 무엇인지

  • 정보처리기사 실기
  • 자바 형변환 정리
  • 내배캠 CS 강의 수강
  • 클럽99 코딩테스트(비기너 + 미들러)
  • 코테 자료구조 정리
728x90
반응형