[프로그래머스][JAVA] 순위 검색 (HashMap, BinarySearch, bit연산)

[프로그래머스][JAVA] 순위 검색 (HashMap, BinarySearch, bit연산)

import java.util. * ;

class Solution {

Map < String , Integer > Wordmap = new HashMap < > ();

List < List < Integer > > ScoreList = new ArrayList < > ();

public int [] solution( String [] info, String [] query) {

Wordmap.put( "-" , 0 );

Wordmap.put( "cpp" , 1 );

Wordmap.put( "java" , 2 );

Wordmap.put( "python" , 3 );

Wordmap.put( "backend" , 1 );

Wordmap.put( "frontend" , 2 );

Wordmap.put( "junior" , 1 );

Wordmap.put( "senior" , 2 );

Wordmap.put( "chicken" , 1 );

Wordmap.put( "pizza" , 2 );

for ( int i = 0 ; i < 4 * 3 * 3 * 3 ; i + + ) {

ScoreList. add ( new ArrayList < > ());

}

for ( String str : info) {

String [] word = str. split ( " " );

int [] arr = {

Wordmap.get(word[ 0 ]) * 3 * 3 * 3 ,

Wordmap.get(word[ 1 ]) * 3 * 3 ,

Wordmap.get(word[ 2 ]) * 3 ,

Wordmap.get(word[ 3 ])};

int score = Integer. parseInt (word[ 4 ]);

for ( int i = 0 ; i < ( 1 < < 4 ); i + + ) {

int idx = 0 ;

for ( int j = 0 ; j < 4 ; j + + ) {

if ((i & ( 1 < < j)) ! = 0 ) {

idx + = arr[j];

}

}

ScoreList.get(idx). add (score);

}

}

for ( int i = 0 ; i < 4 * 3 * 3 * 3 ; i + + )

Collections.sort(ScoreList.get(i));

int [] answer = new int [query. length ];

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

String [] word = query[i]. split ( " " );

int idx =

Wordmap.get(word[ 0 ]) * 3 * 3 * 3 +

Wordmap.get(word[ 2 ]) * 3 * 3 +

Wordmap.get(word[ 4 ]) * 3 +

Wordmap.get(word[ 6 ]);

int score = Integer. parseInt (word[ 7 ]);

int ret = Collections.binarySearch(ScoreList.get(idx), score);

if (ret < 0 ) {

ret = - (ret + 1 );

} else {

for ( int j = ret - 1 ; j > = 0 ; j - - ) {

if (ScoreList.get(idx).get(j) = = score) {

ret = j;

} else {

break ;

}

}

}

answer[i] = ScoreList.get(idx).size() - ret;

}

return answer;

}

}

from http://aig2029.tistory.com/258 by ccl(A) rewrite - 2021-09-07 04:27:40