코딩인터뷰
1.1 문자열에 포함된 문자들이 전부 유일한지를 검사하는 알고리즘을 구현하라. 다른 자료구조를 사용할 수 없는 상황이라면 어떻게 하겠는가?
//풀이(C++) bool isUnique(string* str){ if(str->length() > 256) return false; bool check[256]; for(int i=0;i<str->length();i++){ int index=str->at(i); if(check[index]==true) return false; else check[index]=true; } return true; } |
sol) 문자열이 ASCII코드라고 가정할 때 문자는 총 256개이다. 즉 문자열의 길이가 256 이상이면 중복이 존재할 것이다. 이후 boolean형 배열을 정의해 문자열을 탐색하여 기존에 있던 문자면 false를 반환하도록 한다.
1.2 널 문자로 끝나는 문자열을 뒤집는 reverse(char* str)함수를 C나 C++로 구현하라.
//reverse함수 구현 //문자열 str포인터를 인자로 받아 역순으로 값을 바꿈 //풀이(C++) void reverse(char *str) { char *end = str; char temp; if(str) { while(*end) { ++end; } --end; //마지막 null값 제외 while(str<end) { temp=*str; *str++ = *end; *end-- = temp; } } } |
쉬운 문제이므로 pass!
1.3 문자열 두 개를 입력으로 받아 그중 하나가 다른 하나의 순열인지 판별하는 메서드를 작성하라.
//순열 = 문자열 종류와 길이는 같고 배열된 순서는 다를 수 있음 //풀이(JAVA) /* * 가장 먼저 문자열의 길이를 비교한다. * 이후 정렬을 통해 문자열 종류를 비교한다. */ public boolean isCheck(String str1, String str2) { if(str1.length() != str2.length()) return false; return sort(str1).equals(sort(str2)); } public String sort(String str) { char[] result=str.toCharArray(); java.util.Arrays.sort(result); return new String(result); } |
1.4 주어진 문자열 내의 모든 공백을 '%20'으로 바꾸는 메소드를 작성하라. 문자열 끝에 추가로 필요한 문자들을 더할 수 있는 충분한 공간이 있다고 가정하라. 그리고 공백을 포함하는 문자열의 길이도 함 주어진다고 가정하라.
Ex) 입력 : "Mr John Smith"
출력 : "Mr%20John%20Smith"
//풀이(C++) void convert(char str[], int len) { int blank=0; //공백 개수 int strlen=len; for(int i=0;i<len;i++){ if(str[i]==' ') ++blank; } strlen+=(blank*2); //2자리 증가 str[strlen]='\0'; for(int i=len-1;i>=0;i--){ if(str[i]==' '){ str[strlen-1]='0'; str[strlen-2]='2'; str[strlen-3]='%'; strlen-=3; } else { str[strlen-1]=str[i]; strlen--; } } cout<<str; } |