inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)

그룹 아나그램(GroupAnagrams)

추가 질문드립니다.

125

7d9fbah1mz

작성한 질문수 5

3

안녕하세요!

강의 듣던 중에 하나 질문이 드리고자 합니다.

강의 막바지에, char을 sorting하는 방법이 이제 배열 256개를 만들어 아스키코드를 활용하신다고 잠깐 언급해주셨는데요,

혹시 이에 대한 코드를 알려주실 수 있나요?

하나의 문제에 여러가지로 접근하는 것이 도움이 많이 되는듯하네요!

항상 감사드립니당!!

java 코테 준비 같이 해요!

답변 1

6

푸샵맨 코딩스터디

네 안녕하세요

좋은 질문 감사합니다

이문제는 비슷한 유형으로 시험에 많이 나옵니다. 이문제의 핵심은

//1. 모든 값을 빼낸다

for (String str : strs) {

//2 char[] 어레이로 담는다

   char[] charArray = str.toCharArray();

//3. 소팅한다 -> 알파벳순으로 되겠죠

Arrays.sort(charArray);   eat나 ate  aet로 되죠

//4. 소팅한 순서가 키가 된다

String key = String.valueOf(charArray);

// 5. map 처리

if (map.containsKey(key)) {

map.get(key).add(str);

} else {

List<String> list = new ArrayList<>();

list.add(str);

map.put(key, list);

}

}

질문주신 내용이

"배열 256개를 만들어 아스키코드를 활용하신다고 잠깐 언급해주셨는데요,"

질문주신 내용중 아래 부분만 변경 할수 있죠

=> 배열 26개짜리 방을 만들어서 알파벳을 다 저장할 공간을 만듭니다. 256개는 아스키 자체값을 이용할때 쓰는데

요새 코딩패턴은  26개로 만들어서 'a'를 빼주는 식입니다.

예를들어 eat 단어가 들어오면 , e-a , a-a, t-a 이런식으로 a아스키값 97을 빼면 되죠

e-a는 101-97=4번방에 값에 1을 넣고

a-a는 97-97=0번방에 값에 1을 넣고

t-a는 116-97=19번방에 값에 1을 넣고

그러면 배열방에 [1,0,0,0,1,0,0,0,...] 이런식으로 1이 셋팅됩니다. 결국 eat 나 ate나 0,4,19번 방에 값이 같은거죠

이 방법을 요새는 상당히 많이 이용합니다. 외우세요^^

코드로 보면

for (String str : strs) {

// 1. 26개 배열방을 만든다

int[] count = new int[26];

//2. 스트링 값을 뺀다. 이때 아스키값 a 97을 이용해서 위에서 설명한 내용처럼 26개 인덱스중에 1을 셋팅한다

for (int k = 0; k < str.length(); k++)

count[str.charAt(k) - 'a']++;

// 3. 그 자체를 스트링으로 변환한다.

String key = Arrays.toString(count);

System.out.println("hash " + key);

//4  map에서 처리한다 

if (map.containsKey(key)) {

map.get(key).add(str);

} else {

List<String> list = new ArrayList<>();

list.add(str);

map.put(key, list);

}

}

강의자료에 나오는 m과 n의 범위가 코딩하고 다른거 같습니다

0

255

0

나선형매트릭스 깃허브에 코드가 없는것같아요

0

211

0

로그 파일의 데이터 재정렬 코드가 깃허브에 없어요!

0

225

0

새로 생긴 기초강의 질문드려요

1

377

1

질문드립니다

1

221

1

Unique Paths Integer 질문입니다

0

220

1

subString 방법으로 문제 풀이 영상은 짤린건가요?

1

254

1

DFS 방식으로 푼 것이 맞나요?

0

310

2

질문드립니다~

0

197

1

left if문에 대해서

1

257

1

오타 인가요?

1

238

1

안녕하세요 강사님

1

190

1

질문 드립니다

0

173

2

Queue&Stack 문제해설집 문의

0

184

1

문제분석 로직 질문

1

231

1

시간 복잡도 문의드립니다.

1

233

1

시간복잡도 질문드립니다.

1

203

1

for-each 문 질문있습니다!

0

295

1

강의영상에서 사용된 로그 메소드가 궁금합니다.

2

282

2

강의자료 + 문제 이해 관련 질문입니다

1

279

3

강사님 오류맞나요?

1

208

1

강사님 시간 복잡도에 대해서 질문드립니다.

1

174

1

질문입니다.

1

203

1

문제에 대한 이해

1

314

1