알고리즘/SWEA SWEA D4 4366 정식이의 은행업무 - SWEA D4 4366 정식이의 은행업무 문제링크 https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWMeRLz6kC0DFAXd&categoryId=AWMeRLz6kC0DFAXd&categoryType=CODE&&& SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com * 일단 문제를 정독 하고 1시간 이상 반드시 고민이 필요합니다. 동영상 설명 1시간 이상 고민 했지만 아이디어가 떠오르지 않는다면 동영상에서 약간의 힌트를 얻어봅시다. 볼수밖에 없군.. https://youtu.be/bgcK6abgbwk 소스 보기 동영상 설명을 보고도 전혀 구현이 안된다면 이건 연습 부족입니다. 소스를 보고 작성해 본 후 스스로 백지 상태에서 3번 작성해 볼 의지가 있다면 소스를 살짝 보세요. 꼭 작성할 각오가 되어있습니다. package se.code.d4; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; import java.util.ArrayList; import java.util.List; /** * @author itsmeyjc * @since 2019. 3. 12. * @see https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWMeRLz6kC0DFAXd&categoryId=AWMeRLz6kC0DFAXd&categoryType=CODE&&& * @mem 17,940 kb * @time 109 ms * 2진수의 자리를 하나씩 바꿔가며 일단 10진수로 변경해본다. * 3진수도 역시 같이 처리하면서 2진수의 변경 값과 3진수의 변경 값이 같은 경우가 발견되면 그게 정답이다. * 3^39는 Integer보다 크고 Long 보다 작기 때문에 Long을 이용해서 처리한다. */ public class SWEA_D4_4366_정식이의은행업무 { static StringBuilder sb = new StringBuilder(); public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); br = new BufferedReader(new StringReader(src)); int tc = Integer.parseInt(br.readLine()); for (int t = 1; t <= tc; t++) { long answer = 0; //////////////////////////////////////// TC 처리 String wrong2 = br.readLine(); String wrong3 = br.readLine(); char[] char2 = wrong2.toCharArray(); char[] char3 = wrong3.toCharArray(); // 가능한 후보군 목록 List<Long> candidates = new ArrayList<>(); // 2진수의 한 자리씩 바꿔가며 10진수로 변경 for (int i = 0; i < wrong2.length(); i++) { // 어떤 자릿수를 바꿔본다. 잘못 기억하고 있으니까... char2[i] = char2[i] == '0' ? '1' : '0'; candidates.add(toDigit10(char2, 2)); // 다시 원복 char2[i] = char2[i] == '0' ? '1' : '0'; } outer: for (int j = 0; j < char3.length; j++) { for (char k = '0'; k < '3'; k++) { char old = char3[j]; if (char3[j] != k) { char3[j] = k;// 한번 바꿔보고.. // 답을 찾았다면 그만~ long digit10 = toDigit10(char3, 3); if (candidates.contains(digit10)) { answer = digit10; break outer; } char3[j] = old;// 원복 } } } ////////////////////////////////////////////////// sb.append("#").append(t).append(" ").append(answer).append("\n"); } System.out.println(sb); } // 자릿수가 3^39까지이므로 Long의 최대 범위를 넘지 않기 때문에 api를 사용해도 무방하다. // return Long.parseLong(String.valueOf(char2), 2); static long toDigit10(char[] chars, int digits) { long num = 0; for (int i = 0, j = chars.length - 1; i < chars.length; i++, j--) { num += (chars[i] - '0') * (Math.pow(digits, j)); } return num; } // END: static String src = "1\n" + "1010\n" + "212"; } 공유하기 URL 복사카카오톡 공유페이스북 공유엑스 공유 게시글 관리 구독하기모두의 코딩 저작자표시 비영리 변경금지 Contents SWEA D4 4366 정식이의 은행업무 문제링크 동영상설명 소스보기 당신이 좋아할만한 콘텐츠 SWEA D5 1798 범준이의 제주도 여행계획 2020.04.30 SWEA 모의 5653 줄기세포 배양 2020.04.29 SWEA 모의 2117 홈방범서비스 2020.04.25 4796. 의석이의 우뚝 선 산 2019.08.08 댓글 0 + 이전 댓글 더보기