삐까냥의 파도타기

카카오 블라인드 채용 신입 공채 3차 코딩 테스트) 3번 문제 본문

코딩/카카오 코딩 테스트

카카오 블라인드 채용 신입 공채 3차 코딩 테스트) 3번 문제

금손형아 2018. 3. 6. 15:28


문제 출처 : http://tech.kakao.com/2017/11/14/kakao-blind-recruitment-round-3/


정렬은 해봤지만 보통 숫자 정렬만 하잖아요?


음... 다른 언어로 구현한 코드를 보고싶네요.


전 도저히 생각이 나지 않아 객체로 구현했어요.


더 좋은 방법이 있으면 알려주세요!!!


 2018년 3월 6일


public class kakao_3_3 {

public static void main(String args[]) {

solution(new String[]{"img12.png", "img10.png", "img02.png", "img1.png", "IMG01.GIF", "img2.JPG"});

solution(new String[]{"F-5 Freedom Fighter", "B-50 Superfortress", "A-10 Thunderbolt II", "F-14 Tomcat"});

}

static void solution(String[] fileList) {

ArrayList<File> files = new ArrayList<>();

for (int i = 0; i < fileList.length; i++) {

files.add(new File(fileList[i]));

}

//통일한 형식으로 정렬하기

Collections.sort(files, new FileComparatorByName());

ArrayList<String> sortedFileName = new ArrayList<>();

for (int i = 0; i < files.size(); i++) {

sortedFileName.add(files.get(i).getRealName());

}

System.out.println(sortedFileName);

}

}


class File {

String realName;

String changedName;

File(String name) {

realName = name;

//형식 통일 하기 - [HEAD] + [00000]

int numberStartPosition = 0, taleStartPosition = name.length();

for (int j = 0; j < name.length(); j++ ) {

int tempValue = (int)name.charAt(j);

if (48 <= tempValue && tempValue <= 57) {

if (numberStartPosition == 0) {

numberStartPosition = j;

}

} else if (numberStartPosition > 0 && taleStartPosition == name.length()) {

taleStartPosition = j;

break;

}

}

String head = name.substring(0, numberStartPosition).toUpperCase();

String number = String.valueOf(Integer.valueOf(name.substring(numberStartPosition, taleStartPosition)));

StringBuffer tempZero = new StringBuffer();

for (int i = 1; i <= 5 - number.length(); i++) {

tempZero.append("0");

}

changedName = head + tempZero.toString() + number;

}

String getRealName() {

return realName;

}

String getChangedName() {

return changedName;

}

}


class FileComparatorByName implements Comparator<File> {

    @Override

    public int compare(File file1, File file2) {

        return file1.getChangedName().compareTo(file2.getChangedName());

    }

}