카카오 코드 페스티벌 예선 5번, 캠핑 풀이 - 2
이전에 포스팅한 정석 풀이 말고 다른 풀이를 보여드리겠습니다. 다른 정답들을 보다가 출제의도와는 다르지만 최적화를 통해 시간내에 풀었고(하지만 시간 차이는 꽤 납니다), 코드도 깔끔하니 예뻐서 포스팅 합니다. 파란색의 주석을 보면서 읽으시면 이해하기 쉬울꺼에요. ...
이전에 포스팅한 정석 풀이 말고 다른 풀이를 보여드리겠습니다. 다른 정답들을 보다가 출제의도와는 다르지만 최적화를 통해 시간내에 풀었고(하지만 시간 차이는 꽤 납니다), 코드도 깔끔하니 예뻐서 포스팅 합니다. 파란색의 주석을 보면서 읽으시면 이해하기 쉬울꺼에요. ...
처음으로 참가한 알고리즘 대회인데, 이 대회 덕분에 알고리즘 공부를 시작하게 되었죠. 본선 진출 1문제 차이로 탈락했었습니다. 이 문제는 1번 문제인데요, 행렬로 주어진 그림에서 영역(상하좌우에서 같은 색으로 된 부분은 같은 영역)의 갯수와 최대 영역의 크기를 구하는 문제입니다. 재귀 문제입니다. flood_fill 알고리즘을 이용해서 푸시면 됩니다. ...
플랫폼 별로 다 만들어주고 html코드까지 제공해줌 히트다 히트 https://realfavicongenerator.net/
자세히 보아야 예쁘다 오래 보아야 사랑스럽다 너도 그렇다
주의해야 할것은 오버플로우! 나머지 연산이 포인트 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public class TryHelloWorld { static long[] dp = new long[10000]; public int tiling(int n) { dp[0] = 1; dp[1] = 2; for(int i=2;i<n;i++) { dp[i] = (dp[i-2]*2)+(dp[i-1]-dp[i-2]); if(dp[i]>99999) dp[i]%=100000; } return (int) dp[n-1]; } public static void main(String args[]) { TryHelloWorld tryHelloWorld = new TryHelloWorld(); // 아래는 테스트로 출력해 보기 위한 코드입니다. System.out.print(tryHelloWorld.tiling(262)); }}
Date 오브젝트 쓰기! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class TryHelloWorld { public String getDayName(int a, int b) { String answer = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf2 = new SimpleDateFormat("E"); String dateInString = "2016-"+a+"-"+b; Date date; try { date = sdf.parse(dateInString); answer = sdf2.format(date).toUpperCase(); } catch (ParseException e) { } return answer; } public static void main(String[] args) { TryHelloWorld test = new TryHelloWorld(); int a=5, b=24; System.out.println(test.getDayName(a,b)); } }
2개의 값에 대하여 gcd를 이용해 lcm을 구하는 것을 N개에 대해 반복함 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 public class NLCM { public long gcd(long a,long b) { if(a==0) return b; else return gcd(b%a,a); } public long lcm(long a,long b) { return a*b/gcd(a,b); } public long nlcm(int[] num) { long answer=num[0]; for(int i=0;i<num.length-1;i++) { answer = lcm(answer,num[i+1]); } return answer; } public static void main(String[] args) { NLCM c = new NLCM(); int[] ex = { 2, 6, 8, 14 }; // 아래는 테스트로 출력해 보기 위한 코드입니다. System.out.println(c.nlcm(ex)); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class StringExercise{ String getMiddle(String word){ int len = word.length(); if(len%2==0) {//짝수 return word.substring(len/2-1, len/2+1); } else {//홀수 return word.substring(len/2, len/2+1); } } // 아래는 테스트로 출력해 보기 위한 코드입니다. public static void main(String[] args){ StringExercise se = new StringExercise(); System.out.println(se.getMiddle("power")); } } 아래와 같은 풀이도 있다. 짝수와 홀수를 2로 나눴을때의 결과를 잘 활용한 것 같다. 배워야지 ...
이 문제는 이제 익숙해진 유형 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 class TryHelloWorld { public int findLargestSquare(char [][]board) { int max=0; int min=0; for(int i=0;i<board.length;i++) { for(int j=0;j<board[0].length;j++) { if(board[i][j]=='O') board[i][j]=1; else board[i][j]=0; } } for(int i=0;i<board.length-1;i++) { for(int j=0;j<board[0].length-1;j++) { if(board[i][j]==0||board[i][j+1]==0||board[i+1][j]==0||board[i+1][j+1]==0) continue; else{ min = board[i][j] < board[i][j+1] ? (board[i][j] < board[i+1][j] ? board[i][j] : board[i+1][j]) : (board[i][j+1] < board[i+1][j] ? board[i][j+1] : board[i+1][j]); board[i+1][j+1] = (char) (min+1); if(board[i+1][j+1]>max) max=board[i+1][j+1]; } } } return max*max; } public static void main(String[] args) { TryHelloWorld test = new TryHelloWorld(); char [][]board ={ {'X','O','O','O','X'}, {'X','O','O','O','O'}, {'X','X','O','O','O'}, {'X','X','O','O','O'}, {'X','X','X','X','X'}}; System.out.println(test.findLargestSquare(board)); } }
원래 dp로 풀었는데 알고보니, 단순 비교문제였음.. 그냥 사람수가 가장 많은 도시는 고르면 되는 문제 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 import java.util.Arrays; public class TryHelloWorld { public int chooseCity(int n, int [][]city) { int idx=city[0][0]; int max = city[0][1]; for(int i=1;i<n;i++) { if(city[i][1]>max) { max = city[i][1]; idx = city[i][0]; } } return idx; } public static void main(String[] args) { TryHelloWorld test = new TryHelloWorld(); int tn = 3; int [][]tcity = {{1,5},{2,2},{3,3}}; System.out.println(test.chooseCity(tn,tcity)); } }