어제 분명 올린 여덟 번째 글이 오늘 보니 안 올라가 있어서 지금 좀 정신력이 바사삭... 이지만 그래도 오늘의 기록은 또 열심히 적어야 하니까 눈물 조금 닦고 시작해야겠다. 오늘은 오전에 강의 듣고 코드카타 하고고 나니 오전 시간이 없다고 생각하는 게 맞을 정도도 개인적으로 학습할 시간이 줄었고 그렇게 되니 3시간이 없다고 어제보다 촉박하게 시간이 흘러가는 것 같고, 오늘 할 일도 몇 개 못 한 느낌이 들었다. 그런데 생각해 보면 또 그렇게 아무것도 안 한 건 아닌데 말이다. 문제 하나가 안 풀려서 조금 오래 잡고 있어서 그런가? 시간이 더 부족하고, 많은 일을 하지 못한 기분이 들었다.
9시부터 10시 30분까지는 알고리즘 세션이 있어서 알고리즘 관련 강의를 들었다.
그리고 11시(10분)부터는 알고리즘 코드카타라는 걸 진행했다. 1시간 동안 그날 풀어야 하는 알고리즘 문제 하나를 푸는 시간으로 나는 전에 파이썬으로 몇 문제 풀어보았던 거기도 하고, 초반이라 쉬운 문제를 푸는 거라 10분도 안 걸려서 문제를 풀고 나머지 시간 동안 지난달에 실패했던 백준허브를 사용해서 프로그래머스랑 깃허브를 연동하는 걸 다시 시도했다. 지난달에는 모두가 같은 오류를 겪고 있었기도 하고 누구는 해결했다는데 나는 그 방법을 해도 안 돼서 포기했었는데 오늘은 매니저님께 가능하다는 걸 확인하고 다시 처음부터 세팅해서 진행을 하니 드디어 성공했다! 이제 프로그래머스 다시 열심히 풀어야지!
class Solution {
public int solution(int age) {
int current = 2022;
int birth = current - age + 1;
return birth;
}
}
이후에는 4주 차 강의를 듣고 4주 차 과제를 진행했다. 그런데 4주 차 과제가 나는 어려워서 이 부분에서도 시간을 꽤 들여서 잡고 있었다.
import java.util.regex.Pattern;
// Parser 클래스 선언
public class Parser {
// 연산자를 찾기 위한 정규표현식 상수 선언
private static final String OPERATION_REG = "[+\\-*/]";
// 숫자를 찾기 위한 정규표현식 상수 선언
private static final String NUMBER_REG = "^[0-9]*$";
// 첫 번째 숫자를 파싱하여 설정하는 메서드
public Parser parseFirstNum(String firstInput) throws Exception {
// 입력된 값이 숫자 형식이 아닌 경우 예외 처리
if (!Pattern.matches(NUMBER_REG, firstInput)) {
throw new BadInputException("정수값");
}
// 입력된 값이 숫자 형식일 경우, 해당 값을 정수로 변환하여 Calculator 클래스의 첫 번째 숫자로 설정
this.calculator.setFirstNumber(Integer.parseInt(firstInput));
// 현재 객체 반환 (method chaining을 위함)
return this;
}
// 두 번째 숫자를 파싱하여 설정하는 메서드
public Parser parseSecondNum(String secondInput) throws Exception {
// 입력된 값이 숫자 형식이 아닌 경우 예외 처리
if (!Pattern.matches(NUMBER_REG, secondInput)) {
throw new BadInputException("정수값");
}
// 입력된 값이 숫자 형식일 경우, 해당 값을 정수로 변환하여 Calculator 클래스의 두 번째 숫자로 설정
this.calculator.setSecondNumber(Integer.parseInt(secondInput));
// 현재 객체 반환 (method chaining을 위함)
return this;
}
}
int[] intArray = new int[10];
int count = 0;
if (count < 10) { //10번 이하의 연산 결과값일 때
intArray[count++] = result;
} else { //배열 크기를 초과한 경우
System.out.println("더 이상 결과를 저장할 수 없습니다.");
System.out.println("저장된 결과값:"); // 배열에 저장된 결과값 확인하기
for (int i = 0; i < count; i++) {
System.out.println(intArray[i]);
}
/*1차 시도 : 실패*/
if (count < 10) { //10번 이하의 연산 결과값일 때
intArray[count++] = result;
} else if (count >= 10) { //배열 크기를 초과한 경우
intArray[0] = Integer.parseInt(null); //0번째 인덱스 값을 없앰
int[] copyOfInt = Arrays.copyOf(intArray, intArray.length - 1); //배열 값 재배치
intArray[count++] = result; // 새로운 값 마지막 인덱스에 배치,,,
}
/*2차 시도 : 실패*/
// 결과값 저장 및 인덱스 업데이트
if (count < 10) { // 저장된 결과값이 10개 미만인 경우
intArray[count++] = result; // 배열에 결과값 저장하고 count 증가
} else { // 이미 10개의 결과값이 저장된 경우
intArray[index] = result; // 가장 오래된 결과값 덮어쓰기
index = (index + 1) % 10; // 다음 인덱스로 이동 (순환)
}
/*튜터님께 반복문을 사용하라는 힌트를 얻어 해결*/
// 결과값 저장 및 인덱스 업데이트
if (count < 10) { // 저장된 결과값이 10개 미만인 경우
intArray[count++] = result; // 배열에 결과값 저장하고 count 증가
} else { // 이미 10개의 결과값이 저장된 경우
// 이전 결과값을 한 칸씩 앞으로 이동
for (int i = 0; i < intArray.length - 1; i++) {
intArray[i] = intArray[i + 1];
}
intArray[intArray.length - 1] = result; // 마지막 인덱스에 새 결과값 저장
}
ArrayList<Integer> intArray = new ArrayList<Integer>();
/*ArrayList에 연산 결과 저장할 수 있도록 구현*/
intArray.add(result);
System.out.println(intArray); //ArrayList에 잘 저장이 되었는지 확인
System.out.println("가장 먼저 저장된 연산 결과를 삭제하시겠습니까? (remove 입력 시 삭제)");
/*“remove”라는 문자열을 입력받으면 가장 먼저 저장된 결과가 삭제될 수 있도록 구현*/
String answer = sc.nextLine();
if (answer.equals("remove")) {
intArray.remove(0);
}
System.out.println("저장된 연산결과를 조회하시겠습니까? (inquiry 입력 시 조회)");
String reply = sc.nextLine();
if (reply.equals("inquiry")) {
for (int num : intArray) {
System.out.println(num);
}
}
드디어 Level 1 계산기 만들기 개인 과제 끝!
위의 과제를 하다가 7시부터 8시까지는 요구사항 7번을 풀기 전에 컬렉션 관련 유튜브 영상을 보며 컬렉션에 대해 다시 한 번 정리했다.
set : 중복된 값 저장하지 않으며 순서대로 저장되는 것이 보장 되지 않음
list : 입력된 모든 값을 순서대로 저장함
- A.containsAll(B); 부분집합에 관해 묻는 것으로 A가 B의 모든 값을 가지고 있는지에 대한 결과 값을 boolean 값으로 출력.
- A.addAll(b); A와 B의 합집합에 대해 묻는 것으로 두 개의 List를 합칠 때 사용
- A.retainAll(B); A와 B의 교집합으로 공통 요소만 남기고 나머지는 A에서 제거함
- A.removeAll(B); A에서 B와 겹치는 값을 뺀 나머지만 출력함, 차집합
컬렉션 관련 이미지 출처 : 생활코딩