Notice
Recent Posts
천천히 빛나는
SWEA : Day 1 (Java) 본문
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 |