오늘 배운 내용
-
C# 심화 주차, 조 편성, 팀 과제 시작
-
개인과제 평가 결과 피드백
C# 심화 주차 시작
이번 주에는 C# 심화 주차가 시작됬다. 이번주 내용은 C# 강의 4~5주차의 내용을 수강하고
이번 주에 새로 편성된 팀원들과 함께 팀 과제를 하는 주간이다.
팀 과제 내용은 저번에 개인과제로 만든 것에 +@를 하면서 팀 프로젝트를 경험해보는 의도라고 생각된다.
발제를 마치고 새 팀원분들과 인사를 나누고 SA를 작성했다.
이번 팀원분들은 다 조용하신 편이였는데 또 국룰 사다리타기로 팀장을 뽑고 회의를 해서
내가 개인과제로 짰던 코드를 바탕으로 팀과제를 진행하기로 하고 역할 분담을 했다.
나는 몬스터와 플레이어가 전투하는 부분을 담당하게 되었다.
개인과제 평가 결과 피드백
저녁쯤에 기다리던 개인과제의 피드백이 나왔다!
각 클래스간의 분리와 설계가 잘되어 있습니다.
Scene을 상속받아 각 씬의 데이터가 처리되는 부분도 잘 적용되었습니다.
이 부분은 abstract 를 공부하신다면 접목할만한 좋은 예제가 될 것 같습니다.,
싱글톤의 활용과 인터페이스를 통한 Item 정렬 기능 등 객체지향에 대한 이해가 있는 것으로 보입니다.
단 향후 객체의 활용과 확장성을 위해서는 싱글톤을 제외한 Player 부분들은 static 응 활용하지 않는 방법도 고민할 필요가 있습니다.
abstract를 확실히 개념 공부할 떄 본 것 같기는 한데 어떤식으로 사용하는지 기억은 안났다 내일 시간날때 공부를 해봐야겠다.
싱글톤을 제외한 player부분에 static을 활용하지 않는 방법을 고민해 보라는 말씀에 처음에는 어 다른방법이 또 있나 했는데,
팀 과제를 진행하다가 코드를 보니 싱글톤으로 Instance를 생성해놓고 싱글톤을 통해서 변수들에 접근하는게 아니라
죄다 static으로 선언하고 접근하고 있었다.
그래서 싱글톤 클래스에 있는 변수들은 모두 Instance를 통해서만 접근할 수 있도록 static을 제거하고 코드들을 수정했다.
체육복
문제 분류에 그리디 문제라고 적혀있었는데 어떻게 해야하는지 떠오르지 않아서 오랜시간을 썻다..
결국에는 계산을 여러번 하는 방향으로 코드를 작성하게 되었는데 이러면 case가 많아지고 시간초과가 빡빡해지면 틀리는거 아닌가? 라는 생각이 들었지만
다른 방법은 떠오르지가 않았다.. 그런데 문제를 풀고나서 다른사람들의 풀이를 보니 딱히 다른방법은 보이지 않아서 나중에 구글링을 통해서 확인해봐야겠다.
using System;
using System.Linq;
public class Solution {
// 1. 모든 학생들의 체육복 list를 만들자
// 체육복의 개수가 student에 저장
// 학생의 번호와 인덱스 번호를 맞춰주기 위해서 n+1의 배열 생성
// 생각 해야되는 부분?
// 만약 1,2,3 세 학생이 있을때
// 2가 여분의 체육복이 이 있다면 1,3중에 한명한테 빌려줄 수 있다.
// 그런데 1,2,3,4,5 5명의 학생이 있을떄 {0,2,1,2,0} 이라면
// 1 1 1 2 0 이거나 (무조건 앞의 사람한테 빌려줌)
// 0 2 1 1 1 이된다.(무조건 뒤의 사람한테 빌려줌)
// 1 1 1 1 1 (내가 원하는 답)
// 그러면 둘다 실행하면 되나?
// 앞 -> 뒤 , 뒤 -> 앞의 순서에 따라서 결과값이 달라질 수 있나..?
// student
public int solution(int n, int[] lost, int[] reserve) {
int answer1 = 0;
int answer2 = 0;
int[] student1 = Enumerable.Repeat(1,n+1).ToArray();
int[] student2 = new int[n+1];
int count =0;
student1[0] = 0;
foreach(int lostStudent in lost)
{
student1[lostStudent]--;
}
foreach(int reserveStudent in reserve)
{
student1[reserveStudent]++;
}
student1.CopyTo(student2,0);
for (int i=1; i< n; i++)
{
if(student1[i] > 1 && student1[i+1] == 0){
student1[i]--;
student1[i+1]++;
}
}
for (int i=n; i>1; i--)
{
if(student1[i] > 1 && student1[i-1] == 0){
student1[i]--;
student1[i-1]++;
}
if(student2[i] > 1 && student2[i-1] == 0){
student2[i]--;
student2[i-1]++;
}
}
for (int i=1; i< n; i++)
{
if(student2[i] > 1 && student2[i+1] == 0){
student2[i]--;
student2[i+1]++;
}
}
foreach(int i in student1)
{
answer1 += i > 0 ? 1 : 0;
}
foreach(int i in student2)
{
answer2 += i > 0 ? 1 : 0;
}
return answer1 > answer2 ? answer1 : answer2;
}
}