코테-문자열(java)

ttomy·2022년 7월 19일
0

프로그래머스

문자열 다루기 기본

https://school.programmers.co.kr/learn/courses/30/lessons/12918

class Solution {
    public boolean solution(String s) {
        boolean answer = true;
        if(s.length()!=4 && s.length()!=6){
            return false;
        }
        else{
            char str[]=s.toCharArray();
            for(int i=0;i<str.length;i++){
                if(!(str[i]>='0'&&str[i]<='9')){
                    return false;
                }
            }
        }
        return answer;
    }
}
  • string혹은 char[]의 내용이 숫자인지 아닌지 판별할 다른 방법까지 안다면 좋을 듯 하다.
    -> Integer.parseint()의 인자에 숫자가 아닌 것이 들어가면 NumberFormatException이 throw된다.
    -> 정규표현식?[0-9]
  • str.toCharArray()

문자열 압축

https://school.programmers.co.kr/learn/courses/30/lessons/60057?language=java

  • 압축 길이를 결과적으로 알기만 하면 되는데 압축된 string을 찾아야 된다는 고정관념 때문에 문자열의 마지막까지 처리하는 것에 빠져 어렵게 생각함.
  • for문의 인자를 더 유연하게 활용해야 했다. 굳이 특정 변수를 기준으로 돌지 않아도 된다.
  • stringBuilder도 사용해보자
  • str.substring(,), str.equals() ,Math.min(,)

불량 사용자

https://school.programmers.co.kr/learn/courses/30/lessons/64064

  • ban가능한 id의 index들을 list로 만들고 그 list들중에서 뽑아 경우의수를 구하려는 접근을 함.
  • java컬렉션에 익숙하지 않음. List,Array,Set등의 사용법을 익혀야함.
  • 정규표현식을 익히면 문자검사를 더 효율적으로 할 수 있었다.
    regex에서는 .이 이 문제에서의 *와 비슷한 역할을 한다.
  • 순서에 상관없이 동일한 구성원 가지고 있는지 판별하는 방법?
    Set에 넣엇을 대 사이즈와 List의 사이즈 다르면-> 중복된 인자 존재
    List정렬 후 Arrays.equals()사용?
    -> 하지만 시간초과가 날 듯함
  • 경우의 수를 구하는게 오래걸릴 듯 하여 고민했는데 알고보니 dfs로 풀 수 있었음, dfs에 대한 공부가 더 필요함.

백준

boj 3568

https://www.acmicpc.net/problem/3568

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class boj3568{
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String input=br.readLine().replace(",","").replace(";","");
        String[] str=input.split(" ");

        String common=str[0];
        for(int i=1;i< str.length;i++){
            String[] vars=reverse(str[i]).split("#");
            System.out.println(common+vars[0]+" "+vars[1]+";");
        }
    }


    private static String reverse(String str){
        char[] chars=str.toCharArray();
        StringBuilder sb=new StringBuilder();

        for(int pos=chars.length-1;pos>=0;--pos){
            if(chars[pos]=='&' || chars[pos]=='*'){
                sb.append(chars[pos]);
            }
            else if(chars[pos]==']'){
                sb.append("[]");
                pos--;
            }
            else if(chars[pos]>='a' && chars[pos]<='z'){
                sb.append('#');
                for(int j=0;j<=pos;j++){
                    sb.append(chars[j]);
                }
                break;
            }
        }
        return sb.toString();
    }
}
  • 생각해보니 알파벳을 a~z인지를 검사하지 않고 &,*,[] 가아니면 변수명에 해당하는 걸로 하는게 맞는 것 같다. 변수명에는 숫자도 들어갈 수 있다.

9935 문자열폭발

https://velog.io/@ttomy/%EC%BD%94%ED%85%8C-boj-9935

0개의 댓글