<22.12.26.(월)>
▶type : 이진수를 해석하는 방법입니다. 그래서 정말 중요합니다. 잘 생각하고 사용해야합니다.
▶문맥교환
<복습>
▶문자열
프로그램에서 문자를 문자열(string)이라고 합니다.
string은 읽기만 가능합니다. 문자열 합치기만 가능하지, 정수형으로 합은 불가능합니다.
Tip. 문자열 "6" 과 문자열 "8"을 더하면 "68"이 됩니다.
문자열"78" 과 문자열 "19"를 더하면 "7819"가 됩니다.
문자열 "Hello"와 "World"를 더하면 "Hello Wolrd"가 됩니다.
정말 중요한 것입니다. 꼭 기억하세요.
문자열에서 숫자를 숫자로 생각하는 사고를 버리고, 정말 하나의 문자로 생각해서 접근하는 사고가 필요합니다.
문자열 리터럴은 ""를 사용합니다.
특정문자에 접근하기 위해선 인덱서를 활용해 특정 문자에 접근할 수 있습니다. 주의 사항은 인덱스는 꼭 0부터 시작해야되는 것입니다.
역슬래쉬()를 사용하기 위해선 \두개를 써야합니다. 이를 이스케이프 시퀀스라고 합니다.
문자열 합치기!!
더하기 연산자를 사용해서 문자열을 합칠 수 있습니다.
Concat()을 사용해서 합칠 수 있습니다.
Format()
{0}{1}을 사용해서 문자열을 출력해줍니다.
문자열 보간
Format보다 상위 개념으로 {변수}를 사용해서 문자열을 출력해줍니다.
Concat()
string message4 = string.Concat(message, message1);
새로운 객체를 만듭니다.
Replace()
문자 교체
Length
문자열 길이 출력
Substring()
문자열에서 부분 문자열을 출력할 수 있습니다.
Parse, Convert를 사용해서 문자열을 다른 타입으로 변경이 가능합니다.
Compare : 지정된 두 String 개체를 비교하고 누가 더 사전순으로 앞서있는지를 알려줍니다.
예시로 보여드리겠습니다.
string message1, message2;
message1.CompareTo(message2);
string.Compare(message1, message2);
Equals() : 단순 비교일때 많이 씁니다.
string message1, message2;
message1.Equals(message2);
▶ StringBuilder
string 타입은 불변(Immutable)입니다.
string message = "Hello";
message[0] = 'e'; // 오류 발생
값이 다른 string타입의 객체는 모두 다른 메모리 주소를 가지고 있습니다.
string message1 = string.Concat(message2, message3);
//새로운 객체 생성
message4 = string.Format("{0}{0}", message);
// 새로운 객체 생성
message = message.Replace("H", "C");
// 새로운 객체 생성
message = message.ToUpper();
// 새로운 객체 생성
message = message.ToLower();
// 새로운 객체 생성
StringBuiler stb = new StringBuilder();
stb.Append("Hello");
stb.AppendLine("Wolrd!");
// 다양한 문자열을 합칠때 유용한것이 StringBuilder이다.
// 새로운 객체를 생성하지 않고, 기존 메모리의 쌓아나가는 방법이다.
string message1 = stb.ToString();
string message2 = "Hello" + "World!"
// message1의 속도가 message2 보다 훨씬 빠르다.
메모리 단편화를 주의해야합다.
string.Concat(str1, str2)을 사용하면 연속된 공간이 있는지 탐색해야되고, str1을 복사하고, str2를 복사하고 결과물을 돌려줘야합니다.
하지만 StringBuilder를 사용하면 연속된 공간을 바로 사용할 수 있기 때문에 용이하다고 볼 수 있습니다.
▶배열
같은 타입으로 된 여러 개의 객체를 한 번에 다루고자할떄 사용합니다.
int[] arr = new int[숫자];
인덱스를 0부터 시작하는 이유는 시작 주소를 알기 위해서입니다. 시작 주소를 알면 연속적으로 저장된 데이터를 통해 메모리를 사용할 수 있기 때문입니다.
다차원 배열
보통 3차원 배열까지 사용합니다.
,로 구분짓습니다.
가변 배열
배열안에 배열이 있다고 생각하면 됩니다.
int[][] array = new int[숫자][숫자];
▶선택문
진리값
0은 거짓, 0이외의 값은 참.
불리언 타입
참과 거짓의 데이터를 저장할 수 있는 타입입니다.
조건을 평가하는 곳은 모두 불리언 타입을 사용합니다.
논리 연산자
&&, ||
단축 평가의 유의하면서 효율적으로 식을 작성하면 좋습니다.
if문
참일때 발동, 거짓일때를 쓰고 싶다면 else if, else
switch문
case : 명령어 //case 뒤에는 숫자, 문자를 써야합니다.
break;
Tip
문제를 단계별로 나누는 습관을 들여야한다.
만약 단계를 나눠도 풀리지 않는다면 단계에서 더 단계로 나눠서 풀어본다.
ToString()
문자열로 바꾸겠다.
ToCharArray()
문자형식의 배열로 바꾸겠다.
ToString()과 ToCharArray()를 사용한 예제를 보여드리겠습니다.
문제(프로그래머스) 자릿수 더하기 : 정수 n이 매개변수로 주어질 때 n의 각 자리 숫자의 합을 return하도록 solution 함수를 완성해주세요.
<프로그래머스를 visual로 옮겨서 푸는 점이 좋습니다. 그래서 visual로 옮기는 방법과 함께 설명하겠습니다.>
using System;
class Program
{
public static int solution(int n)
{
int answer = 0;
string a = n.ToString(); //n을 문자열로 바꿔줍니다.
int sum = 0;
char[] arr = a.ToCharArray(); //a를 문자배열 형식으로 바꿔줍니다.
for(int i = 0; i < arr.Length; i++)
{
sum += arr[i] - 48; // char형식은 int.Parse가 불가능합니다.
// 그래서 나온 숫자의 값은 아스키코드값으로 반환되서 나옵니다.
// 0의 아스키코드는 48입니다. 48을 '0'으로 바꿀 수 있습니다.
}
return answer = sum; //sum을 answer한테 넣어줘야합니다.
// 넣지 않는다면 answer은 0값 그대로 출력됩니다. 꼭 기억하세요!!
}
static void Main()
{
string input = Console.ReadLine();
int n = int.Parse(input);
int answer = solution(n); //sum값이 들어간 answer를 answer에 대입합니다.
Console.WriteLine(answer); // 대입된 anwer를 출력합니다.
}
}
static void Main()위에 public int solution(int n)을 넣고, public 다음 static{}을 넣습니다.
그리고 static void Main(){
string input = Console.ReadLine();
int n = int.Parse(input);
int answer = solution(n);
Console.WriteLine(answer);} 내가 출력하고자 하는 값을 넣어줍니다.
<이제 프로그래머스로 옮겨보겠습니다.>
public int solution(int n)
{
int answer = 0;
string a = n.ToString();
int sum = 0;
char[] arr = a.ToCharArray();
for(int i = 0; i < arr.Length; i++)
{
sum += arr[i] - 48;
// arr[i]에서 나오는 값은 숫자가 아닌, 숫자가 갖고 있는 아스키 코드 값이 나온다. 그래서 48을 빼거나, '0'을 빼줘야한다.
// 48을 빼는 이유는 0의 아스키코드 값은 48이기 때문이다.
// 48 대신 '0'을 빼도 된다. 그냥 0이면 안된다. '0'이여야한다.
// '0'에서 ''는 문자를 나타내는 리터럴이니까 주의해서 사용하자.
// 만약 그냥 0을 뺀다면 아스키코드값 그대로 나오게된다. 결국 내가 원하는 값을 얻지 못한다.
}
return answer = sum;
}
이렇게 public에서 static만 제외하고 옮겨주면 됩니다!
▶Char 타입은 int.Parse(), Convert.Int32()로 변경이 불가능합니다. 즉 char 타입은 int형식으로 변환이 불가능합니다. 단 다양한 방법으로 정수를 만들 수 있습니다.
- arr[i] - 48을 int number = int.Parse(arr[i].ToString()) 바꿔줄 수 있습니다.
- arr[i] - 48을 (int)(arr[i] - '0')으로 바꿔줄 수 있습니다.