2014년 9월 29일 월요일

[AlgoSpot] URL


  • 항상 코딩에서 문제를 발견하고 해결하는 부분이 너무나도 어이없는 부분이듯이 이 문제에서도 어이없게도 println대신 print를 써서 14번동안시도중 13번의 제출동안 해매게 되었습다.... ㅠ.ㅠ
  • 처음 문제 제출을 하였을 때 문제점은 replaceAll에 대한 메소드에 대한 것이였다. 

public String replaceAll(String regex, String replacement)
  • replaceAll에서 regex는 정규표현식을 뜻하는 것이므로 ""으로 감싼 단순한 String으로 써서는 안된다. 때문에 정규 표현식을 사용하여 적어 넣어야 한다. 즉 "%20"이 아닌 "(%20)"이 되어야 한다.
  • replacement에서도 마찬가지 이므로 특수문자인 $을 인식시키기 위해서 \\을 사용하여야 합니다.
  • 마지막으로 저는 처음부터 찾은 함정입니다. %25 -> %으로 바꿔줘야 하는데 이 부분은 제일 마지막에 해줘야 합니다. 쉽게 '%252a'을 예로 들었을 경우 %252a -> %2a -> * 가 되기 때문입니다.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int cases = sc.nextInt();
        while(cases-- > 0) {
            String uri = sc.next();

            uri = uri.replaceAll("(%20)", " ");
            uri = uri.replaceAll("(%21)", "!");
            uri = uri.replaceAll("(%24)", "\\$");
            uri = uri.replaceAll("(%28)", "(");
            uri = uri.replaceAll("(%29)", ")");
            uri = uri.replaceAll("(%2a)", "*");
            uri = uri.replaceAll("(%25)", "%");
            System.out.println(uri);
        }
    }
}

  • 취준생의 공부 정리 방입니다. algospot 게시물에서 문제 풀이에 대한 포스팅은 언제나 환영이라는 글을 보았기에 정리겸, 공부겸 겸사겸사 문제풀이를 올립니다. 저작권에 문제 있을시 자삭하겠습니다.
  • 엉터리일수도(아마도 대부분) 느리기도 하지만 풀었다는 것에 의의를 두고 있습니다.



    댓글 없음:

    댓글 쓰기