문제 

Given the head of a singly linked list, return the middle node of the linked list.

If there are two middle nodes, return the second middle node.

 

 

입출력

Example 1:

Input: head = [1,2,3,4,5]

Output: [3,4,5]

Explanation: The middle node of the list is node 3.

 

Example 2:

Input: head = [1,2,3,4,5,6]

Output: [4,5,6]

Explanation: Since the list has two middle nodes with values 3 and 4, we return the second one.

 

 

제약

Constraints:

  • The number of nodes in the list is in the range [1, 100].
  • 1 <= Node.val <= 100

 

 

코드

var middleNode = function(head) {
    let currentNode = head;
    let length = 0;
    while(currentNode != null) {
        length++;
        currentNode = currentNode.next;
    }
    for(let i=0; i<parseInt(length/2); i++) {
        head = head.next;
    }
    return head;
};

 

설명:

먼저 Linked List의 전체 길이를 구하고, head를 List의 중앙으로 옮기기 위해 for문으로 List 길이의 절반만큼 돌면서 head를 이동시켰다.

List 길이의 절반을 계산할 때, length가 홀수인 경우 그냥 i<length/2를 하면 소숫점이 나오기 때문에 parseInt를 사용했다. 

 

 

 

문제 

Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-2^31, 2^31 - 1], then return 0.

Assume the environment does not allow you to store 64-bit integers (signed or unsigned).

 

 

입출력

Example 1:

Input: x = 123 Output: 321

 

Example 2:

Input: x = -123 Output: -321

 

Example 3:

Input: x = 120 Output: 21

 

Example 4:

Input: x = 0 Output: 0

 

 

제약

Constraints:

  • -2^31 <= x <= 2^31 - 1

 

 

코드1 - TryParse

public class Solution {
    public int Reverse(int x) {
        char[] reverse = x.ToString().ToCharArray().Reverse().ToArray();
        string answerStr = new string(reverse);
        if(x<0) {
            answerStr = '-'+answerStr.Remove(answerStr.Length-1);
        }
        
        int answer;

        if (Int32.TryParse(answerStr, out answer))
            return answer;
        else
            return 0;
    }
}



 

코드2 - Convert.ToInt

public class Solution {
    public int Reverse(int x) {
        char[] reverse = x.ToString().ToCharArray().Reverse().ToArray();
        string answer = new string(reverse);
        if(x<0) {
            answer = '-'+answer.Remove(answer.Length-1);
        }
        try{
            return Convert.ToInt32(answer);
        }
        catch{
            return 0;
        }
    }
}

 

 

설명: 

코드1과 코드2는 전반적으로 같지만, int로 형변환을 TryParse로 했는지 Convert.ToInt로 했는지의 차이다. 

그리고 문제에서 뒤집은 숫자가 32-bit integers 범위를 벗어나면 0을 반환하라는 조건이 주어졌기 때문에

TryParse를 사용한 코드1에선 if-else문으로, Convert.ToInt를 사용한 코드2에선 try-catch문으로 숫자가 범위를 벗어난 경우에 0를 반환했다. 

 

 

 

1. Array.IndexOf()

Array.IndexOf(array, element) 함수는 array 배열 내부의 요소에 element를 포함하면 해당 element의 index를 반환하고, 없으면 -1을 반환한다.  

 

using System;

namespace check_element_in_array
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] stringArray = { "value1", "value2", "value3", "value4" };
            string value = "value3";
            int index = Array.IndexOf(stringArray, value);
            if (index > -1)
            {
                Console.WriteLine("{0}은 배열의 index {1}에 있다.", value, index);
            }
            else
            {
                Console.WriteLine("해당 값은 배열에 없다.");
            }
        }
    }
}

출력 결과: value3은 배열의 index 2에 있다.

 

 

2. Array.FindIndex()

Array.FindIndex(array, pattern) 함수는 pattern에 부합하는 요소가 array 배열에 있으면 해당 요소의 index를 반환하고, 없으면 -1을 반환한다.

Array.FindIndex() 함수에서 pattern 매개 변수를 지정하기 위해 람다 표현식을 사용할 수 있다.

 

using System;

namespace check_element_in_array
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] stringArray = { "value1", "value2", "value3", "value4" };
            string value = "value3";
            var index = Array.FindIndex(stringArray, x => x == value);
            if (index > -1)
            {
                Console.WriteLine("{0}은 배열의 index {1}에 있다.", value, index);
            }
            else
            {
                Console.WriteLine("해당 값은 배열에 없다.");
            }
        }
    }
}

출력 결과: value3은 배열의 index 2에 있다.

 

 

3. Array.Exists()

Array.Exists() 함수는 배열에 요소가 있는지 여부만 확인하고 요소가 있는 배열의 인덱스에 관심이 없는 경우에 사용할 수 있다.

Array.Exists() 함수는 요소가 배열에 있으면 true이고 배열에 없으면 false인 부울 값을 반환한다.

 

using System;

namespace check_element_in_array
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] stringArray = { "value1", "value2", "value3", "value4" };
            string value = "value3";
            var check = Array.Exists(stringArray, x => x == value);
            if (check == true)
            {
                Console.WriteLine("{0}은 배열에 있다.", value);
            }
            else
            {
                Console.WriteLine("해당 값은 배열에 없다.");
            }
        }
    }
}

출력 결과: value3은 배열에 있다.

 

 

 

 

 

↓ 참고 사이트

https://www.delftstack.com/howto/csharp/check-for-an-element-inside-an-array-in-csharp/

 

 

'Study > C#' 카테고리의 다른 글

[C#] Array와 String에서 IndexOf 사용하기  (0) 2021.09.22
[C#] string을 int로 변환하는 방법  (0) 2021.09.20

+ Recent posts