-
[2019 카카오 겨울인턴] 튜플 (JAVA)알고리즘 공부/문제 풀이 2020. 5. 6. 22:01
<접근 방법>
1. 입력으로 들어온 스트링을 1 1,2 1,2,3 ... 과 같이 정리하기
1) 입력의 첫번째와 마지막을 감싸고 있는 중괄호 벗겨내기
->String 메서드 s.substring 이용
2) 입력의 "},{"을 "/" 로 치환하기
-> replace 이용
split에 "},{" 들어가면 오류나서.. 아마 입력에 "},{"가 한 묶음처럼 나타나지 않는 부분도 있어서 그런듯
3) 치환된 "/"를 기준으로 스트링 나누어 스트링배열 만들기
-> String 메서드 s.split("") 이용
String subS=s.substring(2, s.length()-2); subS=subS.replace("},{","/"); String[] arrS=subS.split("/"); answer=new int[arrS.length];
2. 정리된 스트링 배열을 오름차순으로 정리하기
Arrays.sort(배열,정렬방법)
-> 정렬방법 : Comparator 이용하여 정의
Comparator<String> c = new Comparator<String>() { public int compare(String s1, String s2) { return Integer.compare(s1.length(), s2.length()); } }; Arrays.sort(arrS, c);
3. (실패했지만 나의 시도)
1) 반복문을 통해 스트링 배열에 접근
2) 해당 원소의 ","를 없앤다
-> s[i]=s[i].replace(",","")
3) 그러면 남은 것은 오직 숫자뿐! 그것을 정답 배열에 넣어준다
4) 바로 다음 원소부터 끝까지 이 숫자를 ","로 치환한다
5) 반복반복
for(int i=0;i<arrS.length;i++) { arrS[i]=arrS[i].replace(",",""); answer[i]=Integer.parseInt(arrS[i]); for(int j=i+1;j<arrS.length;j++) { String num=Integer.toString(answer[i]); arrS[j]=arrS[j].replace(num, ","); } }
몇몇 테스트케이스에 대해선 정답인데, 틀린 경우가 나옴 ㅠㅠ
아직도 왜인지 모르겠음 흑흑
4. (정답인 남의 시도)
1) HashSet를 활용한다 : 중복 허용하지 않고 순서 관계없는 자료구조
2) for-each 반복문으로 생성한 배열에 접근
3) 배열 원소를 ","로 split하여 하나하나 숫자에 대해 접근
4) HashSet에 넣을 수 있다면 정답배열로 넣기
Set<String> set=new HashSet<String>(); int idx=0; for(String s1: arrS){ for(String s2: s1.split(",")){ if(set.add(s2)) answer[idx++]=Integer.parseInt(s2); } }
으앙으앙
<전체코드>
package kakao; import java.util.*; public class tuple { static int[] solution(String s) { int[] answer; Set<String> set=new HashSet<String>(); String subS=s.substring(2, s.length()-2); subS=subS.replace("},{","/"); String[] arrS=subS.split("/"); answer=new int[arrS.length]; Comparator<String> c = new Comparator<String>() { public int compare(String s1, String s2) { return Integer.compare(s1.length(), s2.length()); } }; Arrays.sort(arrS, c); /* for(int i=0;i<arrS.length;i++) { arrS[i]=arrS[i].replace(",",""); answer[i]=Integer.parseInt(arrS[i]); for(int j=i+1;j<arrS.length;j++) { String num=Integer.toString(answer[i]); arrS[j]=arrS[j].replace(num, ","); } } */ int idx=0; for(String s1: arrS){ for(String s2: s1.split(",")){ if(set.add(s2)) answer[idx++]=Integer.parseInt(s2); } } return answer; } public static void main(String[] args) { // TODO Auto-generated method stub int[] a=solution("{{4,2,3},{3},{2,3,4,1},{2,3}}"); for(int i=0;i<a.length;i++) { System.out.println(a[i]); } } }
제 코드 반례좀 찾아주세용 ㅠㅠ
for-each 친숙해지기!
자료구조 능숙하게 사용하기
'알고리즘 공부 > 문제 풀이' 카테고리의 다른 글
[프로그래머스] 정렬 - 가장 큰 수 (1) 2020.08.06 [프로그래머스] 정렬 - k 번째 수 (1) 2020.08.06 [2019 카카오 겨울인턴] 호텔방 (JAVA) (0) 2020.05.08 [2019 카카오 겨울인턴] 불량사용자 (JAVA) (0) 2020.05.08 [2019 카카오 겨울인턴] 인형뽑기 (JAVA) (0) 2020.05.06