-
2주차(9)-프로그래머스 알고리즘 풀이/3주차 블랙잭 코드 뜯어보기TIL 2023. 8. 24. 20:38반응형
알고리즘
1.자릿수 더하기
정수형으로 한자리씩 떼올까?
ㄴㄴ
수학적 계산을 사용
(n>0)조건을 가진 반복문 생성 (EX-123)
입력된 숫자 n을 10으로 나눈 나머지를 구함
123 = 3
그 나머지를 answer(return 결과값)에 더해줌 (1의 자리 수 부터 시작)
n을 10으로 나눈 후 반복문 조건으로 돌아감(1의 자리는 날리고 몫(12)만 남음)
n이 0보다 크다면 위의 과정을 반복함
2.약수의 합
약수의 정의? 나머지가 없이 나눠 떨어지는 값
n의 약수는 n이하의 나머지가 발생하지 않는 수이다.(1과 자기 자신은 반드시 포함한다.)
ex 10의 약수 : 1, 2, 5, 10
9의 약수 : 1, 3, 9
1)간단한 방법
for문을 n번 돌린 후 거기서 약수를 찾는다.
2)반복을 절반으로 줄이는 법
n의 약수 중 n 스스로를 제외하고 가장 큰 약수는 n/2 이하의 값이다.
짝수 = n/2 ||||| 홀수 = n/2 보다 작음
즉 for문을 n/2 번만큼 돌려 준 뒤, 거기서 약수를 찾아(n % i == 0)
결과에 더해주면 된다.
3.나머지가 1이 되는 수 찾기
static int solution(int n)
{
int answer = 0;
for (int i = 1; ++i < n - 1;) //i = 1 ; 2 < 33 - 1; 2<32 3< 32....
{
if (n % i == 1) // 32 2 == 0 31
{
answer = i;
break;
}
}
if (answer == 0)
answer = n - 1;
Console.WriteLine(answer);
return answer;
}
이번엔 한눈에 보기엔 좀 난해해서 코드도 가져옴
요구
입력받은 n값을 처리하는 메서드
n보다 작은 정수 중에서 n을 나누었을 때
나머지가 1인값 중 가장 작은 x를 반환한다.
for문에서
i는 1부터 시작하며 n - 2 까지 증가시킨다.
==> 뒤의 n - 1 은 반복문이 요구를 충족시키지 못한 경우 사용하기 때문에
제외 용도로 적은 것
if문에서
n을 i로 나눈 값이 1인지 체크
1이라면 우리가 찾는 값(i는 가장 낮은수부터 올라가므로)
찾은값 저장, 반복종료
루프를 다 돌아도 나머지가 1인값을 찾지 못했다면,
스스로를 -1 하여 결과를 반환한다.
결과적으로 n은 반복 중 나머지 1을 남기는 가장 낮은 결과값을
반환하거나, for에서 찾지 못할경우 n-1을 반환하게 된다.어렵지 않게 푼 문제들은 제외하였다.
3주차 블랙잭
public Deck()
{
cards = new List<Card>();
foreach (Suit s in Enum.GetValues(typeof(Suit))) // foreach(저장할 변수(저장소) 안에 반복가능한 객체(리스트,딕셔너리,열거형,문자열 등)) {}보통은 반복 객체의 요소에 접근
{
foreach (Rank r in Enum.GetValues(typeof(Rank)))
{
cards.Add(new Card(s, r));
}
}
Shuffle();
}
1)해당 메서드의 foreach 부분이 잘 이해가 안갔다.
(사실 foreach 반복문 자체를 잘 이해 못했지만 거기에 조건까지 이해가 더 안갔음)
여기서 foreach를 복습하고 가자
foreach는 반복 작업을 나타내는 키워드이다.
foreach(var x in y)
반복문(정보를 받아 저장할자료형 x 안에 y의 반복 가능 객체의 정보를 넣는다.)
그 후 {} 안의 내용을 'y의 길이만큼' 반복함
{}내부의 내용은 보통 y의 각 요소에 접근하고 변경, 처리하는 코드를 쓴다.
2)foreach (Suit s in Enum.GetValues(typeof(Suit)))
조건문의 내용이 보기만해도 어지럽다.
하나하나 뜯어보자
Suit s전역변수로 설정한 enum 배열 + s로 변수 선언 이다.
Enum.은 열거형 형식을 인수로 받아 해당 열거형의 모든 멤버를 반환한다.
이것을 사용하면 열거형 형식에 속하지 않은 다른 클래스에서도 멤버 목록을 얻을 수 있다.
Enum.은 typeof()와 함께 사용하며 typeof의 파라미터로는 열거형 형식이 들어간다.
즉 typeof에서 Suit enum 배열을 가져와서
그 값을 Enum 모든멤버를 배열로 반환하는데
거기에 GetValues가 붙어서 Rank멤버들에게 int값을 부여하고 반환한다.
(아래 내용 부분에서 이성언 튜터님의 도움을 얻었다)
내가 Card의 메서드 GetValue()와
Enum.GetValues의 GetValues를 헷갈린 거였다.
Enum.GetValues라는 메서드가 존재하고,
public static Array GetValues (Type enumType);
라는 형식으로 사용한다
역할은
지정된 열거형에서 상수 값의 배열을 검색하는것임
말은 어렵지만 열거형을 배열로 바꿔서 반환하는것이다.
Enum의 경우 배열의 순서와, 배열의 string값이 동시에 존재하므로
두개의 배열로 나온다는데
아무튼 사용할 때 잘 넘겨준다고 한다.오늘은 Enum.GetValues 부분 알아보다가 시간을 너무 써버렸다.
TIL 제출하고 좀 더 공부해야할듯
반응형'TIL' 카테고리의 다른 글
3주차(1)-팀 프로젝트 시작 (0) 2023.08.28 2주차(10)-프로그래머스 알고리즘 풀이 (0) 2023.08.25 2주차(8)-개인프로젝트 제출, 개인프로젝트 특강 (0) 2023.08.23 2주차(7)-개인프로젝트 필수 구현 완료, 선택 구현 사항 추가중 (0) 2023.08.22 2주차(6)-개인프로젝트 재시작 (0) 2023.08.21