public static int solution(int a, int b) {
int answer = 0;
//정수인 숫자를 문자로 변환
String aa = String.valueOf(a);
String bb = String.valueOf(b);
//문자열인 두 숫자를 합쳐서 정수로 변환
int aabb = Integer.valueOf(aa + bb);
int aabb2 = 2 * a * b;
//조건 판별식
if (aabb > aabb2 || aabb == aabb2)
answer = aabb;
if (aabb < aabb2)
answer = aabb2;
return answer;
}
// 1. res/bitmap.txt 파일을 생성하고 다음 데이터를 복사/붙여넣으시오.
11111111110000000000
11111111100000000000
11111111000000000000
11111110000000000000
11111100000000000000
11111000000000000000
11110000000000000000
11100000000000000000
11000000000000000000
10000000000000000000
2. bitmap이라는 이름으로 20X10크기의 정수를 담을 수 있는 이차원 배열을 생성하시오.
[ ] bitmap = [ ];
3. 다음 그림과 같은 모양이 되도록 값의 위치를 변경하시오
00000000001111111111
00000000000111111111
00000000000011111111
00000000000001111111
00000000000000111111
00000000000000011111
00000000000000001111
00000000000000000111
00000000000000000011
00000000000000000001
{
// 코드를 작성하는 공간
System.out.println(“자리변경 완료”);
}
// 4. res/bitmap-out.txt 파일로 bitmap 배열의 값들을 저장
{
// 코드를 작성하는 공간
System.out.println(“저장 완료”);
✅ 해결방법
bitmap [10][20] 이 있으면 [20]에 해당하는 값들을 좌우 대칭하게 바꿔줘야 한다.
좌표로 생각하고 접근하면 편하다!
✅ 코드
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.Charset;
import java.util.Scanner;
//문제 6 : 다음 각 절차를 따라 작성하시오.
//
//// 1. res/bitmap.txt 파일을 생성하고 다음 데이터를 복사/붙여넣으시오.
//
//11111111110000000000
//11111111100000000000
//11111111000000000000
//11111110000000000000
//11111100000000000000
//11111000000000000000
//11110000000000000000
//11100000000000000000
//11000000000000000000
//10000000000000000000
public class Ex_0629_01 {
public static void main(String[] args) throws IOException {
//2. bitmap이라는 이름으로 20X10크기의 정수를 담을 수 있는 이차원 배열을 생성하시오.
// [ ] bitmap = [ ];
int[][] bitmap = new int[10][20];
//파일 읽어오기 & 읽어온 파일 btimap 배열에 하나씩 담기.
{
FileInputStream fis = new FileInputStream("afterschool/res/bitmap.txt");
Scanner fscan = new Scanner(fis);
for (int i = 0; i < bitmap.length; i++) {
String str = fscan.nextLine();
for (int j = 0; j < bitmap[i].length; j++) {
String[] tokens = str.split("");
bitmap[i][j] = Integer.parseInt(tokens[j]);
System.out.print(bitmap[i][j]);
}
System.out.println();
}
//3. 다음 그림과 같은 모양이 되도록 값의 위치를 변경하시오
//00000000001111111111
//00000000000111111111
//00000000000011111111
//00000000000001111111
//00000000000000111111
//00000000000000011111
//00000000000000001111
//00000000000000000111
//00000000000000000011
//00000000000000000001
//값 바꾸기 정렬
//bitmap.length "10", bitmap.length[i][] "20"
for (int i = 0; i < bitmap.length; i++)
for (int j = 0; j < bitmap[i].length/2; j++) {
int temp = bitmap[i][(bitmap[i].length-1) - j];
bitmap[i][(bitmap[i].length-1) - j] = bitmap[i][j];
bitmap[i][j] = temp;
}
//i 0 | 1 | 2 | 3 | ....
//j 0 <-> 19 | 1 <-> 18 | 2 <-> 17 | 3 <-> 16 | ....
}
System.out.println("자리변경 완료");
//i=10 j=20
for (int i = 0; i < bitmap.length; i++) {
for (int j = 0; j < bitmap[i].length; j++) {
System.out.print(bitmap[i][j]);
}
System.out.println();
}
// 4. res/bitmap-out.txt 파일로 bitmap 배열의 값들을 저장
{
FileOutputStream fos = new FileOutputStream("afterschool/res/bitmap_out.txt");
PrintWriter fout = new PrintWriter(fos, true, Charset.forName("UTF-8"));
for (int i = 0; i < bitmap.length; i++) {
for (int j = 0; j < bitmap[i].length; j++) {
fout.print(bitmap[i][j]);
}
fout.println();
}
fout.close();
fos.close();
}
}
}
🔥어려웠던 점🔥
아래 좌우 대칭하게 값을 바꾸는 방법을 생각하는데 어려웠었다.
데이터의 값의 갯수는 20개이고, 좌우 대칭하게 바꿔주면 10번만 반복하면 된다.
두 번째 for문안에 Index를 "나누기 2"를 안해줘서 못하고 있었지만... 옆에 착한 짝꿍 누나가 팁을 줘서 해결!
Scanner scan = new Scanner(System.in);
int i = scan.nextInt(); // 1)
String s = scan.nextLine(); // 2)
이렇게 사용하면 int만 받아오고 nextLine은 그냥 건너뛰게 되는 오류가 발생하게 될 것이다.
nextInt()에서 Enter를 칠 때 발생하는 '개행문자'를 처리하지 않고 버퍼에 남기기 때문이다.
Scanner에 있는 개행문자 \r\n을 비워주어야 한다.
운영체제별 개행문자를 지정하는 문자열이 다른데 아래를 참고하면 된다.
✅ 운영체제별 개행문자(줄 바꿈)
LF(Line-Feed)
Mac, Linux (Unix 계열) 줄 바꿈 문자열 = \n
ASCII 코드 = 10
커서 위치는 그대로 두고 종이의 한라인 위로 올리는 동작
현재 위치에서 바로 아래로 이동
종이를 한 칸 올리기
CR(Carriage-Return)
Mac 초기 모델 줄 바꿈 문자열 = \r
ASCII 코드 = 13
커서 위치를 맨 앞으로 옮기는 동작
커서 위치를 앞으로 이동
CRLF (Carriage-Return+Line-Feed)
Windows, DOS 줄 바꿈 문자열 = \r\n
CR(\r) + LR(\n) 두 동작을 합쳐서 (\r\n)
커서를 다음라인 맨 앞으로 옮겨주는 동작
✅ 해결방법
1. 첫 번째 방법
scan.nextLine();
2. 두 번째 방법
scan.skip("[\\r\\n]+");
두 가지 방법 중 하나를 사용하면 된다.
예시
Scanner scan = new Scanner(System.in);
int i = scan.nextInt(); // 1)
//방법 1
scan.nextLine();
String s = scan.nextLine(); // 2)
------------------------------------------
Scanner scan = new Scanner(System.in);
int i = scan.nextInt(); // 1)
//방법2
scan.skip("[\\r\\n]+");
String s = scan.nextLine(); // 2)