class Solution {
public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
int days = 10;
Map<String,Integer> wantMap = new HashMap<>();
for (int i = 0; i < want.length; i++) {
wantMap.put(want[i],number[i]);
}
for (int i = 0; i < discount.length - days + 1; i++) {
Map<String,Integer> discountMap = new HashMap<>();
for (int j = 0; j < days; j++) {
discountMap.put(
discount[i+j],
discountMap.getOrDefault(discount[i+j],0) + 1);
}
boolean result = true;
for (String a : wantMap.keySet()) {
if(wantMap.get(a) != discountMap.get(a)) {
result = false;
}
}
if(result) {
answer++;
}
}
return answer;
}
}
discountMap.put(discount[i+j],discountMap.getOrDefault(discount[i+j],0) + 1);
discount[i+j]를 put할 때 같은 값이 있으면 그 키값의 value값을 가져오고 없으면 0(default값)을 가져온다.
// header 에서 JWT 가져오기
public String getJwtFromHeader(HttpServletRequest request) {
String bearerToken = request.getHeader(AUTHORIZATION_HEADER);
// if (StringUtils.hasText(bearerToken) && bearerToken.startsWith(BEARER_PREFIX)) {
// return bearerToken.substring(7);
// }
return bearerToken;
}
// JWT 토큰 substring
public String substringToken(String tokenValue) {
if (StringUtils.hasText(tokenValue) && tokenValue.startsWith(BEARER_PREFIX)) {
return tokenValue.substring(7);
}
logger.error("Not Found Token");
throw new NullPointerException("Not Found Token");
}
protected void doFilterInternal(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) throws ServletException, IOException {
String tokenValue = jwtUtil.getJwtFromHeader(req);
if (StringUtils.hasText(tokenValue)) {
// JWT 토큰 substring
tokenValue = jwtUtil.substringToken(tokenValue);
// log.info(tokenValue);
if (!jwtUtil.validateToken(tokenValue)) {
log.error("Token Error");
res.setStatus(HttpServletResponse.SC_BAD_REQUEST);
res.setCharacterEncoding("utf-8");
res.getWriter().write("토큰이 유효하지 않습니다.");
return;
}
Claims info = jwtUtil.getUserInfoFromToken(tokenValue);
try {
setAuthentication(info.getSubject());
} catch (Exception e) {
log.error(e.getMessage());
return;
}
}
filterChain.doFilter(req, res);
}
로그에 Not Found Token이 뜨길래 왜 그러지 하고 봤는데 토큰이 getJwtFromHeader에서 이미 "Bearer "이 짤려서 반환되고 있었다. 그래서 substringToken에서 "Bearer "로 시작을 안하니까 에러가 난 것 같다. 디버그를 하면서 jwt 검증, 인가 경로를 볼 수 있었다.