# Day3 피어세션_9조
---
### **Soap**
#### P2920 : 음계
1. Scanner 로 입력받은 문자열을 split 으로 배열에 저장
2. Arrays.toString 으로 문자열로 변환
3. ascending , descending, mix 판별
4. 결과 출력
#### P8958 : OX 퀴즈
1. Scanner 로 입력받은 문자열을 split 으로 배열에 저장
2. Scoring 함수를 만들어 지정된 횟수만큼 반복
3. score, add 변수를 두어 문자열 배열을 순회하며 채점
4. 결과 출력
#### P11654 : 아스키 코드
1. 문자열 형태로 입력받아 charAt(0) 으로 char 변환
2. (int) 로 char -> (int) 변환 : =아스키 코드
3. 결과 출력
-> 테스트 해보니 (int) 붙이지 않아도 int 변수에 저장할 때 자동 변환
---
### **KAI**
#### P2920 : 음계
- 풀이과정
1. readLine() 메서드를 이용하여 받은 문자열을 split을 사용하여 공백을 기준으로 잘라서 배열을 만든다.
2. sorted()메서드를 사용하여 배열의 오름차순과 내림차순을 비교하여 출력하도록 의도함.
#### P8958 : OX 퀴즈
- 풀이과정
1. 반복문을 통해 O일 경우 count를 중첩시키고, count를 최종점수에 넣어서 표현하도록 한다
- 작업과정
1. 입력되는 테스트 횟수를 testCount 변수에 할당한다.
2. 입력된 숫자만큼 반복되고, 입력되는 문자열을 한 글자씩 oxStringArray배열의 한 인덱스에 담는다.
3. oxStringArray 배열에 있는 요소들을 차례대로 O가 맞으면 점수를 증가시켜서 총합점수에 중첩시킨다.
4. O가 아니면 X이기 때문에 점수를 0점으로 초기화한다.
#### P11654 : 아스키 코드
- 작업과정
1. ascilValue : ascilValue자체가 이미 입력받은 문자에 대한 아스키값을 갖고 있다. Character 타입을 가져와 UInt8? 타입으로 반환하기 때문에 강제 언래핑을 해줌
---
### **웨이드**
#### P2920 : 음계
- 구현 방식
- BufferedReader를 이용해서 문자열을 입력받습니다.
- StringTokenizer를 이용해 공백 기준으로 분리한 뒤 정수로 변환해 리스트에 담습니다.
- 각각 오름차순, 내림차순으로 정렬돼 있는 리스트 객체를 생성합니다.
- 입력값을 담은 리스트를 오름차순, 내림차순 리스트와 비교하여 결괏값을 담고 출력합니다.
- 의견
- List 생성에 하드 코딩 대신 Int Stream 사용
#### P8958 : OX 퀴즈
- 구현 방식
- BufferedReader를 이용해서 문자열을 입력받고 정수로 변환해 테스트 케이스 변수에 저장합니다.
- 테스트 케이스 개수만큼 반복문을 돌도록 설정하고 반복문마다 퀴즈의 결과인 문자열을 입력받습니다.
- 다시 문자열의 길이만큼 반복문을 돌도록 설정하고 char 형 배열에 문자열의 원소들을 옮겨 담습니다.
- 점수(score)와 연속된 횟수(count)를 나타내는 변수들을 각각 0으로 초기화합니다.
- 다시 char 형 배열의 크기만큼 반복문을 돌도록 설정하고 문자가 'O'일 때는 count의 수를 1 증가시키고, score에 더해줍니다. 문자가 'X'일 때는 count를 다시 0으로 초기화시킵니다.
- 각 테스트 케이스마다 점수를 출력합니다.
- 팀원들의 방식 참고
- String[] test = bf.readLine().split("");
=> split을 사용해 한 번에 배열에 담은 후, for-each문 사용
#### P11654 : 아스키 코드
- 구현 방식
- BufferedReader를 이용해서 문자열을 입력받습니다.
- 문자열을 char 형으로 바꿀 수 있게 charAt을 사용합니다.
- 아스키 코드값을 출력하기 위해 다시 int로 형 변환을 하여 출력합니다.
- 팀원들의 방식 참고
- String 타입의 선언을 거치지 않고 바로 int 변수로 선언
- int n = System.in.read(); 사용
---
### **yelly**
- 공통 설계 의도:
- `BufferedReader`가 사용자 입력을 버퍼해서 전달하기 때문에 `Scanner` 보다 입력 성능이 뛰어나기 때문에 사용.
- 문자열 파싱에 `StringTokenizer`를 사용한 이유는 여러 개의 문자들을 하나씩 처리하기 용이한 메서드를 제공해주기 때문에 사용.
#### J2920 : 음계
- 현재 음계가 이전 음계보다 높으면 `+1`, 낮으면 `-1`을 누적해서 더하면 마지막 계산된 누적값에 따라 연속해서 증가인지 감소인지를 알 수 있다.
- 누적값이 +7이면 연속해서 증가했음을 의미
- 누적값이 -7이면 연속해서 감소했음을 의미
- +7도 -7도 아니면 증가와 감소를 반복했음을 의미
- `StringTokenizer`를 통해 반복문을 실행하면 맨 처음의 음계는 비교할 이전 음계가 없다.
- 따라서 이전 음계 초기값은 1~8과 상관없는 값인 `9`로 설정
> 웨이드: `StringTokenizer`에 전달하는 구분자는 디폴트가 `" "`이라서 명시적으로 `" "`를 전달하지 않아도 된다.
> 적용해볼 수 있는 방법:
> Alex와 웨이드, Soap가 사용한 방법으로 List와 List는 `equals()`로 List의 내부 값이 모두 동일한지 비교가 가능하다. (Alex: Array도 가능)
#### J8958 : OX 퀴즈
- 연속해서 정답을 맞출 때마다 연속인지 아닌지를 체크해주는 변수 `int chain`을 0으로 초기화
- 연속해서 정답을 맞출때 마다 `+1`씩 누적으로 더해준다.
- 한 번이라도 틀리면 연속 기록이 깨지므로 `chain`은 0으로 초기화된다.
- 매번 점수를 맞출 때마다 +1점씩이지만, 연속해서 맞출 경우 연속으로 맞춘 횟수만큼 추가 점수를 얻는다.
> Alex: 연속을 체크해주는 `chain` 변수가 `0`이 아닌 `1`이면서 `chain`만 누적 점수에 더해주면 로직이 똑같아진다.
#### J11654 : 아스키 코드
- `String.charAt(int index)`을 사용하면 문자열의 index에 해당하는 값을 추출할 수 있다.
- 추출한 문자열을 `int` 타입으로 타입 캐스팅 해주면 ASCII 코드가 된다.
> 적용해 볼 수 있는 방법:
> Alex: `System.in.read()` -> 자바에서는 기본적으로 ASCII로 입력되므로 `System.in.read()`로 입력받은 값을 바로 타입 캐스팅하면 Swift 처럼 한 줄로 표현 가능.
---
### **Alex**
#### P2920 : 음계
처음에 String answer =" "; 이렇게 초기화를 했는데, 나중에 불필요한 거 같아서 String answer; 이렇게 값을 안 넣어줌
String이 불변이라서 값을 변경하면 새로운 인스턴스를 만들고 그게 메모리 낭비가 될 거 같아서. 근데 요즘 가비지 컬렉터가 잘 돼 있어서 굳이 이 부분을 신경쓰지 않아도 될 거 같다.
근데, String answer; 를 하면 이게 null값이 되는 건데 null을 불필요하게 만들 필요는 없을 거 같다. 만약 실수로 잊어버리면 null값이 코드에 돌아다니기 때문. Optional을 의식적으로 써보기
#### P8958 : OX 퀴즈
변수를 여러개 쓰고 if를 여러개 쓰면서 가독성이 많이 떨어졌다. 변수를 많이 안 쓰는 방법을 고려하기
#### P11654 : 아스키 코드
int n = System.in.read(); 를 활용해서 바로 int값으로 받는 방법이 있었다.
자바에서는 가장 기본 입력 스트림이 InputStream 다. System.in은 InputStream 타입의 필드라고 한다.
그래서 System.in.read();를 할 때 int값으로 받는 것 같다. 원래 컴퓨터는 모든 입력값을 숫자로 받고서 그 다음에 야스키코드의 문자에 대응시켜 문자로 변환하는 것으로 알고 있다. char 타입으로 변환시키기 전의 원시값을 먼저 받는 방식으로 보인다.