N By N 배열의 숫자가 빙빙 돌아가며 찍히는 형태로 출력하는것..


점심시간에 잠깐 짬내서 날 코딩 ㄱㄱ...


  1 16 15 14 13

  2 17 24 23 12

  3 18 25 22 11

  4 19 20 21 10

  5  6  7  8  9



위와 같은 형태로 출력되면 성공.......



아래는 코드 . 전문..


public class Snail {


public void run(int size) {


int[][] matrix = new int[size][size];


boolean xToRight = false;

boolean yToDown = true;


// first line (x 로 기록)

for (int x = 1; x <= size; x++) {

matrix[x - 1][0] = x;


}

int leftSize = size + 1;

int loopCount = 0;


int lastValue = size + 1;


int xPos = size;

int yPos = 1;


while (leftSize-- > 0) {

loopCount++;


// Y 방향 값

for (int innerLoop = 0; innerLoop < (size - loopCount); innerLoop++) {

if (yToDown)

yPos++;

else

yPos--;

matrix[xPos - 1][yPos - 1] = lastValue++;


}

yToDown = !yToDown;

// X 방향 값

for (int innerLoop = 0; innerLoop < (size - loopCount); innerLoop++) {

if (xToRight)

xPos++;

else

xPos--;

matrix[xPos - 1][yPos - 1] = lastValue++;


}

xToRight = !xToRight;

}


for (int i = 0; i < size; i++) {

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

System.out.printf("%3d", matrix[i][j]);

}

System.out.println();

}

System.out.println();


}


public static void main(String[] args) {


Snail s = new Snail();

s.run(5);


}


}



초기 1렬을 그대로 출력하고


x축 끝에서 만날시 방향 전환

y축 끝에서 만날시 방향 전환


대충 이런 느낌으로 작성하였습니다.



머리가 굳어가는 느낌에 가끔 기름칠.


  1 32 31 30 29 28 27 26 25

  2 33 56 55 54 53 52 51 24

  3 34 57 72 71 70 69 50 23

  4 35 58 73 80 79 68 49 22

  5 36 59 74 81 78 67 48 21

  6 37 60 75 76 77 66 47 20

  7 38 61 62 63 64 65 46 19

  8 39 40 41 42 43 44 45 18

  9 10 11 12 13 14 15 16 17


9에 대한 출력값...






페이스북 생활코딩 그룹에 나온문제중 하나...

https://www.facebook.com/groups/codingeverybody/



"1원, 5원, 10원, 50원, 100원, 500원짜리가 각각 C1, C5, C10, C50, C100, C500개씩 있습니다. 가능한 적은 수의 동적으로 A원을 지불하려면, 몇 개의 동전이 있어야 할까요? 지불 방법은 적어도 1개는 존재한다고 가정합니다."




자바 개발자로서(?) 


낼름 풀어보았다...


public static void main(String[] args) {

int val = 5323; // 입력값


int cv = 1000; // 500 -> 100 -> 50 으로 변할값.

int cx = 0, div = 0; // cx는 동전의 갯수 div는 2 : 5 스위치 값.

do {

div = (div == 2 ? 5 : 2); // 처음에 div 는 0이므로 div는 2가 되고 

cv = cv / div; // cv는 500이된다.

cx += val / cv; // val / cv 는 정수값이므로, cx에 나누기의 몫이 들어가고

val = val % cv; // 나머지 값은 다음턴으로 넘긴다.

} while (cv != 1);    // 1이 아니면 루프... do 아래 2번재 줄에서 cv 가 1이되어도 연산이 되므로 문제가 없다.

System.out.println(cx); // 대상 목적인 코인의 갯수만 출력 >.<.

}


댓글로 작성된 다른 능력자 분들의 코드를 보고 있자니..

아직 멀었구나 하는 생각만든다..( 파이썬 능력자님들 ㅎㄷㄷ  , 스칼라도 배우고 싶다능 ... )

좋아하는것을 하나하나 쌓아가는 2013년이 되었으면 하는 바램으로 간만의 포스팅 끗..

+ Recent posts