Pccp 준비하기 - 1 문자열문제 풀어보기

박경현·2024년 1월 6일
0

이번 년도 초에는 기본적으로 두가지 자격증을 취득하려고 한다

  1. Pccp 3단계 받기
  2. 정보처리기사 필기 및 실기 합격하기

Pccp관련 책이 마침 도서관에 있어서 이번에 빌려서 2회독을 해보며 마스터하자!

어떻게 작성할 것인지

앞으로 작성하는데 있어 정확한 기준을 정해서 작성을 해보려고 한다

그 날 풀었던 문제 중 막혔던 문제 먼저 작성하기
그 날 풀었던 문제 중 다른 풀이 보고 더 나은 방식 있으면 무엇이 더 나은지 비교하며 적기
사용한 알고리즘들 정리하기


3진법 뒤집기

레벨2인 "이진 변환 반복하기" 문제보다 이게 더 많은 생각을 하게 해줬다!

일단 진법이 무엇인지 알아야하는데 우리는 기본적으로 10진법을 사용한다
즉 0-9로 모든 숫자를 표현하는 것이다!

2진법의 경우 0과 1로, 3진법의 경우 0,1,2로 표현한다!
대표적으로 사용하는 진법은 2진법, 8진법, 16진법이 있다

10진법 25는 2진법으로 1101이다
-> 1(2^4) + 1(2^3) + 0*(2^2) + 1 (2^0)

3진법 뒤집기 - 해결 방법

이 문제의 경우 자연수 n이 먼저 주어집니다

3진법으로 바꾸면 1200 이런 식으로 변환이 된다 했을때 다시 거꾸로 뒤집습니다 -> 0021

이걸 다시 10진법 즉 정수로 변환해서 int형으로 반환하면 됩니다


자바에는 Integer.parseInt(문자열, 진법)으로 작성하면 적힌 진법을 토대로 정수로 만들어줍니다

Integer.toString(정수, 진법)으로 작성하면 정수를 그 진법에 맞게 적고 문자열로 반환해줍니다


추가로 String은 immutable이어서 reverse를 하려면 StringBuilder로 변환 후 해줘야 합니다!
이 3개를 사용해서 코드를 작성해보았습니다

3진법 뒤집기 - 코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        String str = Integer.toString(n, 3);
        String reversed = new StringBuilder(str).reverse().toString();
        answer = Integer.parseInt(reversed, 3);
        return answer;
    }
}

다른 사람의 코드

사실 자바에 있는 내장 함수를 사용하지 않아도 진법을 구현할 줄 알아야한다

String a = "";

while(n > 0) {
	a = (n % 3) + a;
    n /= 3;
}

45라는 숫자가 들어왔다고 가정해보자
45 % 3 => a = 0
45 /= 3 => n = 15

15 % 3 => a = 00
15 /= 3 => n= 5

5 % 3 => a = 200
5 /= 3 => n = 1

1 % 3 => a = 1200
1 /= 3 => n = 0


이렇게 해서 3진법이 완성된다 핵심은 나누기를 한 결과가 항상 매번 뒤에 그대로 붙어야하는 것!

java에서 정규식(rex) 사용하기

정규식의 사전적 의미를 찾아보면

특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식언어입니다

[a,b,c] -> abc중 아무거나
[^abc] -> abc제외
a* - a가 0개 이상
a+ - a가 1개 이상
a? - a가 0개나 1개
a{5} - a가 5개
a{2,} - a가 2개 이상
ab|cd - ab 혹은 cd
^a - a가 처음인지
a$ - a가 마지막인지
\. - .이 특수문자일때 일반 문자로 변환해줌

이건 정규식을 사용하는 자바 내장 함수입니다
s.replaceAll("정규식", "바꿀문자열"); - String형태로 바꿔서 전달합니다
s.matches("정규식") - 이건 boolean형을 반환합니다
s.split("정규식") - String[] 원본 문자열을 잘라서 반환합니다

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글