천천히 빛나는

SWEA : Day 1 (Java) 본문

JAVA/SWEA (JAVA)

SWEA : Day 1 (Java)

까만콩 •ᴥ• 2024. 1. 29. 12:08

 

Day 1에서는 [원재의 메모리 복구하기, 농작물 수확하기]를 다룹니다.

 

1289. 원재의 메모리 복구하기 (D3)

import java.io.*;
class Solution
{
    static int initCount(String m) {
        int cnt = m.charAt(0) - '0';
        for(int i = 0; i < m.length()-1; i++) {
            if(m.charAt(i) != m.charAt(i+1))
                cnt++;
        }
        return cnt;
    }
     
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int T = Integer.parseInt(br.readLine());
         
        for(int test_case = 1; test_case <= T; test_case++)
        {
            sb.append("#").append(test_case).append(" ");
             
            String memory = br.readLine();
            sb.append(initCount(memory)).append("\n");
        }
        System.out.println(sb.toString());
        br.close();
    }
}

index 0부터 바로 전 값과 비교하여 다르면 수정 횟수 변수 cnt를 1 증가시키는 방법이다. 

처음 1이 나오는 값을 찾고 같은 방식으로 동작하는 코드를 구현한 분들도 있었다.

 

 

2805. 농작물 수확하기 (D3)

import java.io.BufferedReader;
import java.io.InputStreamReader;
class Solution
{
    static int N;
    static int getMoney(String[] value) {
        int range = N/2;
        int ans = 0;
        for(int i = 0; i < range + 1; i++) {
            String v = value[i];
            for(int j = range - i; j <= range + i; j++) {
                ans += v.charAt(j) - '0';
            }
        }
        for(int i = 1; i < range + 1; i++) {
            String v = value[i+range];
            for(int j = i; j < N - i; j++) {
                ans += v.charAt(j) - '0';
            }
        }
        return ans;
    }
     
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int T = Integer.parseInt(br.readLine());
        for(int test_case = 1; test_case <= T; test_case++)
        {
            sb.append("#").append(test_case).append(" ");
            N = Integer.parseInt(br.readLine());
            String[] str = new String [N];
            for(int i = 0; i < N; i++) {
                str[i] = br.readLine();
            }
            sb.append(getMoney(str)).append("\n");
        }
        System.out.println(sb.toString());
        br.close();
    }
}

피라미드 형태의 별 찍기 문제처럼 코드를 구성해주었다. 별 찍기 문제는 출력만 된다면 자신이 생각하는 방식으로 구현하는 것이 가장 알맞은 방식이다.

 

int ans = 0;
int start = n/2;
int end = n/2;

for (int i=0; i<n; i++) {
	for (int j = start; j <= end; j++) { // 각 행
		ans += map[i][j];
	}
	if (i < n/2) { 
		start -= 1;
		end += 1;
	} else { // 가운데 이후
		start += 1;
		end -= 1;
	}
}

그래도 다른 분들 코드를 보다가 직관적인 코드가 있길래 공유하도록 하겠다.

 

public class AbcDef {
	public static void main(String[] args) {
		/* 출력할 것
		        A
		      B C D
		    E F G H I
		  J K L M N O P
		Q R S T U V W X Y */
		
		char C = 'A';
		for(int i = 4; i >= 0; i--) {
			for(int j = 0; j < i; j++) {
				System.out.print("  ");
			}
			for(int j = i; j < (9-i); j++) {
				System.out.printf("%-2c", C++);
			}
			System.out.println();
		}
		
		
		/* 출력할 것
        A B C D E F G H I
          J K L M N O P
            Q R S T U
              V W X
                Y */
		C = 'A';
		for(int i = 0; i < 5; i++) {
			for(int j = 0; j < i; j++) {
				System.out.print("  ");
			}
			for(int j = i; j < (9-i); j++) {
				System.out.printf("%-2c", C++);
			}
			System.out.println();
		}

	}
}

이와 매우 유사한 별 찍기 문제 (알파벳 피라미드 문제)를 공유하도록 하겠다.

 

 

'JAVA > SWEA (JAVA)' 카테고리의 다른 글

SWEA : Day 3 (Java)  (1) 2024.02.09
SWEA : Day 2 (Java)  (1) 2024.02.05