문제: 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 다음과 같이 변경해서 입력했다.
크로아티아 알파벳 | 변경 |
---|---|
č | c= |
ć | c- |
dž | dz= |
ñ | d- |
lj | lj |
nj | nj |
š | s= |
ž | z= |
예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다. 입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
(출처:https://www.acmicpc.net/problem/29410)
음...
또 굉장히 직관적으로 풀었다.
String을 활용해서 풀다보니 뭔가 굉장히 느려졌고, 또 그 String에 해당하는 변수를 일일이 하나씩 만들어서 풀다보니 역시 많이 느려졌다. 하지만 딱히 코드가 남들보다 월등히 길다거나 남들보다 엄청 느린건 아니어서 어떻게 하는게 정답인지는 잘 모르겠지만, 다른 정답이 있을텐데 또 찾아보기는 귀찮은 이 게으름 ㅋㅋㅋ
문자가 2개 이상 나열된 애들을 어떻게 하나로 인식할까 고민하다가 String메소드에 있던 replace를 활용하는게 빠르겠다고 생각이 들었다.
하지만 알다시피 String은 그 안의 내용이 변하는게 아니라 그냥 잠시동안 꺼내서 그걸 바꿔서 보여주는 것이어서 선언된 String자체가 변하지는 않는다. 그래서 계단식으로 바뀐 내용을 다시 새로운 str로 선언하고, 또 그 선언한거에서 replace해서 새롭게 또 다른 string을 만들고 해야했다.
"c-"라는 글자를 발견했을 때 숫자 1로 바꿔줬다. 왜 숫자 1로 바꿨냐 함은 그냥... 글자 1개로 바꿔주려고
어차피 글자 수를 세는게 전부이기 때문에 2개의 문자로 이루어진 글자를 1개로만 바꿔주면 된다고 생각했다.
그렇게 모든 글자를 한개의 숫자로 바꾸고 나서 총 숫자가 몇개 있는지 세어보면 되니까
분명 다른 좋은 방법이 있을텐데...
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
고민하다가 또 원초적인 방법으로 풀고 말았따 어허이..
------------------------------------------------------------------------------------------
포문을 돌리면 된다!
새롭게 String을 만들지 않고 그 변수를 그대로 받아서 새롭게 갱신해 주면 되는거였는데!!
1 2 3 4 5 6 7 | String croatia [] = {"c=","c-","dz=","d-","lj","nj","s=","z="}; for(int i=0; i<8 ;i++) { voca = voca.replace(croatia[i], "1"); } System.out.println(voca.length()); | cs |
우선 해당되는 크로아티아 문자 변형들을 string배열로 각각 넣어준다.
그 다음 포문을 돌려서 순서대로 바꿔주면 끝나는 문제였는뎅...
핫핫항!!!!!!!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | import java.util.Scanner; public class Croatia { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String voca = scan.nextLine(); //c= ->1 String a = voca.replaceAll("c=", "1"); //c- ->2 String b = a.replaceAll("c-", "2"); //dz= ->3 String c = b.replaceAll("dz=", "3"); //d- ->4 String d = c.replaceAll("d-", "4"); //lj ->5 String e = d.replaceAll("lj", "5"); //nj ->6 String f = e.replaceAll("nj", "6"); //s= ->7 String g = f.replaceAll("s=", "7"); //z= ->8 String h = g.replaceAll("z=", "8"); System.out.println(h.length()); scan.close(); } } | cs |
'건승하고있어요 > 알고리즘' 카테고리의 다른 글
베르나르 베르베르 개미수열 (0) | 2018.05.15 |
---|---|
[문자열사용하기] 단어공부 (2) | 2018.04.06 |
[문자열사용하기] 다이얼 (0) | 2018.03.07 |
[문자열사용하기] 상수 (0) | 2018.03.06 |
[문자열사용하기] 알파벳찾기 / break문 (0) | 2018.02.17 |