728x90
오늘 한 것
- 자바의 정석
- chapter 2 (변수) 연습문제 풀기
- chapter 3 (연산자) 연습문제 풀기
- chapter 4 (조건문 반복문) 연습문제 풀기
- chapter 5 (배열) 연습문제 풀기
- chapter 6 (객체지향 프로그래밍 1) 공부
- chapter 7 (객체지향 프로그래밍 2) 공부
- chapter 6 (객체지향 프로그래밍 1) 연습문제 풀기
- 알고리즘 (항해 99 시험)
첫 번째 문제
자연수 n의 각자리를 뒤집은 순서로 더하고 출력하는 거
import java.util.Arrays;
public class Main {
//자연수 n의 각 자리 숫자를 뒤집은 순서로 더해 출력하는 수식을 리턴해주세요. 예를들어 n이 12345이면 "5+4+3+2+1=15" 라는 문자열을 리턴합니다.
//입력값 예제
//718253 "3+5+2+8+1+7=26"
public String solution(int n) {
String answer = "";
int sum = 0;
char[] charArray = Integer.toString(n).toCharArray();
for (int i = charArray.length - 1; i>=0; i--) {
sum += Integer.parseInt(String.valueOf(charArray[i]));
if (i == 0) {
answer += charArray[i] + "=" + sum;
}else {
answer += charArray[i] + "+";
}
}
return answer;
}
public static void main(String[] args) {
Main method = new Main();
System.out.println(method.solution(718253));
}
}
두 번째 문제
public class Main2 {
//첫째 줄에 정수 n이 주어진다. **(0≤n≤100)**
//
//n줄 만큼 ‘*’로 이루어진 삼각형을 출력한다.
//
//최상단의 별은 1개이며, 모든 줄의 별의 갯수는 홀수이다.
public void solution2(int star) {
for(int i=0;i<star;i++){ // 스타만큼 배열 반복
for(int j=0;j<star-i;j++){ // 공백은 star기준 -1씩 출력
System.out.print(" "); // 별 왼쪽에 공백
}
for(int j=0;j<2*i+1;j++){ //별(*) 1개 시작으로 2개씩 증가..홀수이기떄문에
System.out.print("*");
}
System.out.println(""); // 별을 찍어주고 줄 바꿈용도
}
}
public static void main(String[] args) {
Main2 method = new Main2();
int star = 9;
method.solution2(star);
}
}
세 번째 문제
사방탐색문제... 그냥 전에 한번 스윽 지나친 기억이 있어서 사방탐색이 알고 있는 거만 조금 알았다. 무사히 잘 푼 듯
public class Main3 {
public void solution(int[][] arr1) {
//**5x5 2차원 배열이 주어질 때** 어떤 원소가 상하좌우에 있는 **원소보다 클 때 해당 위치에 * 을 표시**하는 프로그램을 작성하세요. 경계선에 있는 수는 **상하좌우 중 존재하는 원소만을 비교**합니다.
//
//조건 1: 결과는 하나의 문자열이며, 2차원 배열의 각 배열의 요소들에 해당하는 문자는 길이 1의 공백으로 구분된다.
//
//조건2: 결과에서 배열간의 구분은 줄바꿈(개행문자)으로 한다.
//
//조건3: 비교할 원소가 존재하지 않는 경우 0으로 간주한다
//[[7,4,6,5,9],
// [6,1,3,4,5],
// [4,8,5,6,9],
// [1,3,0,6,4],
// [6,4,8,1,7]
// ]
//* 4 * 5 *
//6 1 3 4 5
//4 * 5 6 *
//1 3 0 6 4
//* 4 * 1 *
String[][] check = new String[5][5];
int[] dr = {-1, 1, 0, 0}; // x좌표
int[] dc = {0, 0, -1, 1}; // y좌표
int r = arr1.length;
int c = arr1[0].length;
for(int i = 0; i < r; i++) {
for(int j = 0; j < c; j++) {
// 사방 탐색 DFS(깊이 우선 탐색)
for(int w = 0; w < 4; w++) { // 동서남북 탐색
// 4번 돌면서 ii, jj에 사방향을 지정
int ii = i + dr[w];
int jj = j + dc[w];
// 배열 인덱스가 마이너스가 되거나 행열을 초과하는 현상을 방지
if(ii < 0 || ii == r || jj < 0 || jj == c) {
continue;
}
if (arr1[i][j] <= arr1[ii][jj]) {
check[i][j] = String.valueOf(arr1[i][j]);
}
}
if(check[i][j] != null){
System.out.print(check[i][j]);
}else {
System.out.print("*");
}
}
System.out.println();
}
}
public static void main(String[] args) {
Main3 method = new Main3();
int[][] arr1 = {
{7,4,6,5,9} ,
{6,1,3,4,5},
{4,8,5,6,9},
{1,3,0,6,4},
{6,4,8,1,7}
};
System.currentTimeMillis();
method.solution(arr1);
}
}
마무리
오늘은 항해 99 시험이 있었다. 목요일마다 시험을 본다. 좀 쫄렸지만 그래도 무사히 잘 마친 거 같다. 처음 두 문제는 연습을 많이 해서 금방 풀었지만 3번째 문제는 처음에는 어찌하지 하면서 덜덜 떨고 있었지만 전에 미로탐색 예제를 본 게 기억이 나고 해서 사방탐색 알고리즘을 찾아서 잘 풀었다. 우선 손으로 그림부터 그리면서 차근차근 풀었더니 잘 해결한 듯
x좌표, y좌표가 무척 헷갈려서 힘들었다. 우리가 기존에 생각하는 x, y랑은 완전다르다 코딩에서는 배열을 사용하기 때문에 다음에 또 문제를 풀면 주의하자.
'TIL > 2023' 카테고리의 다른 글
[0624] TIL (0) | 2023.06.25 |
---|---|
[0623] TIL (0) | 2023.06.24 |
[0621] TIL (0) | 2023.06.22 |
[0620] TIL (0) | 2023.06.21 |
[WIL] 항해 1주차 (0) | 2023.06.18 |