1. 학습 목표
1) 숫자 야구 필수 기능 구현
2) 알고리즘 프로그래머스 1문제, 백준 2문제 풀이
2. 학습 내용
1) 실습 환경 : IntelliJ, VSCode
2) 학습 진행 내용 : 숫자 야구 구현 ( LV1,2 진행 ) - 랜덤 값 설정, 동일 값 예외처리, 스트라이크/볼/아웃 구현, 반복, 출력, 예외처리 등
이전에 클래스 분리 없이 main에 작성한 것을 참고하여 진행하였습니다. 숫자 야구는 '[CH3.개인과제]숫자야구'에 따로 작성하였습니다.
3) 알고리즘 진행 중 이슈 내용 :
(1) 프로그래머스 - 22. 두 정수 사이의 합
등차수열 공식 : n * (a + l)/2 적용.
//기존 코드 - 이것도 통과는 됨
class Solution {
public long solution(int a, int b) {
long answer = 0;
int tmp;
if (a > b) {
tmp = a;
a = b;
b = tmp;
}
for (int i=0;i<(b-a)+1;i++){
answer += a+i;
}
return answer;
}
}
//수정
class Solution {
public long solution(int a, int b) {
int tmp;
if (a > b) {tmp = a; a = b; b = tmp;}
return sum(a,b);
}
private long sum(long a, long b){
return (b - a + 1)*(a + b)/2;
}
}
(2) 백준 - 5597. 과제 안 내신 분 ..?
기존에는 리스트에 1~30까지 넣고 입력받은 값들을 리스트에서 제거하는 방식으로 진행. c++은 다른 사람의 풀이를 찾아보고 보다 간단한 방식을 적용해서 풀이해보았습니다.
//기존 코드
import java.util.Scanner;
import java.util.ArrayList;
public class Main {
private static final int TOTAL = 30;
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
ArrayList<Integer> list = new ArrayList<>();
int n;
for (int i=0;i<TOTAL;i++){
list.add(i+1);
}
for (int j=0;j<TOTAL-2;j++){
n = sc.nextInt();
if (list.contains(n)) list.remove(Integer.valueOf(n));
}
for (int l : list){
System.out.println(l);
}
}
}
// C++로 구현 시에는 새로운 방식 적용
#include <iostream>
using namespace std;
int main(){
int inputArray[31] = {0,};
int input;
for (int i=0;i<28;i++){
cin >> input;
inputArray[input] = 1;
}
for (int j=1;j<=30;j++){
if (!inputArray[j]) cout << j << '\n';
}
return 0;
}
3. 다음 학습 내용
1) 개인 과제 숫자 야구 마무리
2) 나무반 디버깅 수업
3) 과제 진행하면서 이해 안 됐던 부분 공부
4. 회고
숫자 야구 과제 시간이 생각보다 빠듯해서 과제를 제대로 제출할 수 있을지 걱정이다. 필수 기능이라도 제대로 구현하는 게 목표..!