//구글콘솔 광고 추가가

처음엔 works의 배열에 있는 작업량이 모두 변경되도 상관 없는 줄 알고 풀었다가 잘못됨을 직감하고 다시 품.

sort로 정렬을 해주고 작업량이 가장 많은 날의 일정에서 --해주면 된다.

 

+20점

테스트 케이스 추가

n(int) works(int[]) Return
10 [10,10,1] 51 >>  5,5,1

야근 지수 문제

 

내 코드
using System;
using System.Linq;
//+20
public class Solution {
    public long solution(int n, int[] works) {
        long answer = 0;     
        int sum = works.Sum();
        if (sum <= n)
            answer = 0;
        else
        {
            Array.Sort(works);
            for(int i =0; i < n; i++)
            {
                int lastIndex = works.Length - 1;
                while (lastIndex >=0 && works[lastIndex] <= works[lastIndex-1])
                {
                    lastIndex--;
                    if (lastIndex == 0) break;
                }
                --works[lastIndex];
            }
            foreach(long i in works)
            {
                answer += i * i;
            }
        }
        return answer;
    }
}
728x90
반응형

level 3 문제는 아닌 것 같은데 내가 편법으로 푼건가 고민되는 문제. +3점

sort로 정렬한 다음 A랑 B랑 같은 값을 내게 되면 B가 자기꺼에서 더 큰 수를 내밀어야 됨.  

 

테스트 케이스 추가

A B
{1,1,2,5,8} {1,1,1,2,3}

숫자게임 문제

 

내 코드
using System;
//+3
public class Solution {
    public int solution(int[] A, int[] B) {
        bool[] C = new bool[B.Length];
        int answer = -1;
        int num = 0;
        
        Array.Sort(A);
        Array.Sort(B);

        for(int i = 0; i < A.Length; i++)
        {
            for (int j= num; j < B.Length; j++)
            {
                if (A[i] < B[j])
                {
                    if (!C[j])
                    {
                        answer++;
                        C[j] = true;
                        num = j;
                        break;
                    }
                }
            }
        }
        if (answer == -1)
            answer = 0;
        else
            answer += 1;
        return answer;
    }
}
728x90
반응형

노트에 계속 풀어보다 정답으로 간 문제. 그래서 테스트 케이스를 엄청 추가했다.

추가한 테스트 케이스들

Parameters Return
["OOX", "XXO", "OXO"] 1
["XXX", "XXX", "XXX"] 0
["OOO", "X.X", "..."] 1
["..O", "...", "..."] 1
[".X.", "...", "..."] 0
[".OX", "OXO", "XO."] 0
["XXX", ".OO", "O.."] 1
["XXX", "XOO", "OOO"] 0
["OX.", "...", "..."] 1

 


혼자서 하는 택택토 문제

내 코드
using System;

public class Solution {
    public int solution(string[] board) {
        int answer = 1;
        int xCount = 0;
        int oCount = 0;
        int oWin = 0;
        int xWin = 0;

        for (int i = 0; i < board.Length; i++)
        {
            for (int j = 0; j < board[i].Length; j++)
            {
                if (board[i][j] == 'O')
                {
                    oCount += 1;
                }
                else if (board[i][j] == 'X')
                {
                    xCount += 1;
                }
            }
        }   
        for (int i = 0; i < 3; i++)
        {
            if (board[i] == "OOO")
            {
                oWin += 1;
            }
            else if (board[i] == "XXX")
            {
                xWin += 1;
            }
            else if(board[0][i] == 'O' && board[1][i] == 'O' && board[2][i] == 'O')
            {
                oWin += 1;
            }
            else if (board[0][i] == 'X' && board[1][i] == 'X' && board[2][i] == 'X')
            {
                xWin += 1;
            }
            else if (board[0][0] == 'O' && board[1][1] == 'O' && board[2][2] == 'O')
            {
                oWin += 1;
            }
            else if (board[0][0] == 'X' && board[1][1] == 'X' && board[2][2] == 'X')
            {
                xWin += 1;
            }
            else if (board[0][2] == 'O' && board[1][1] == 'O' && board[2][0] == 'O')
            {
                oWin += 1;
            }
            else if (board[0][2] == 'X' && board[1][1] == 'X' && board[2][0] == 'X')
            {
                xWin += 1;
            }
        }
        if(oCount < xCount)
        {
            answer =0;
        }
        if(oCount > xCount +1)
        {
            answer =0;
        }
        if(oWin + xWin > 1)
        {
            if(oWin> 1 && oCount -xCount == 1)
            {
                answer =1;
            }
            else
            {
                answer =0;
            }
        }
        if (xWin == 1 && oCount > xCount)
        {
            answer = 0;
        }
        if(oWin == 1 && oCount == xCount)
        {
            answer = 0;
        }
        return answer;
    }
}

 

728x90
반응형
대충 만든 자판 문제

 

내 코드
using System;
using System.Collections.Generic;
public class Solution {
    public int[] solution(string[] keymap, string[] targets) 
    {   
        Dictionary<char, int > dic = new Dictionary<char, int>();
        List<int> answer = new List<int>();
        int num = 0;
        //알파벳별 최소순서 정리
        for (int i = 0; i < keymap.Length; i++)
        {
            for (int j = 0; j < keymap[i].Length; j++)
            {
                if (!dic.ContainsKey(keymap[i][j]))
                {
                    dic.Add(keymap[i][j], j+1);
                }
                else
                {
                    if(dic[keymap[i][j]] > j+1)
                    {
                        dic[keymap[i][j]] = j+1;
                    }
                }
            }
        }
        //확인
        for (int i = 0; i < targets.Length; i++)
        {
            for (int j = 0; j < targets[i].Length; j++)
            {
                if(dic.ContainsKey(targets[i][j]))
                {
                    num += dic[targets[i][j]];
                }
                else
                {
                    num = -1;
                    break;
                }    
                
            }
            answer.Add(num);
            num = 0;
        }
        return answer.ToArray();
    }
}
728x90
반응형
덧칠하기 문제

내 코드
using System;

public class Solution {
    public int solution(int n, int m, int[] section) {
        int answer = 1;
        int paint = section[0] + (m-1);
        for (int i = 0; i < section.Length; i++)
        {
            if (paint < section[i])
            {
                answer++;
                paint = section[i] + (m-1);
            }
        }
        return answer;
    }
}
728x90
반응형

테스트 케이스 추가 시킴

Parameters  : ["..", "##"]  Return : [1, 0, 2, 2]


바탕화면 정리 문제

내 코드
using System;

public class Solution {
    public int[] solution(string[] wallpaper) {
        int[] answer = new int[4];
        bool isFirst = false;
        for (int i = 0; i < wallpaper.Length; i++)
        {
            for (int j = 0; j < wallpaper[i].Length; j++)
            {
                if (wallpaper[i][j] == '#')
                {
                    if (!isFirst)
                    {
                        answer[0] = i;
                        answer[1] = j;
                        answer[2] = i+1;
                        answer[3] = j + 1;
                        isFirst = true;
                    }
                    if(answer[1] > j)
                    {
                        answer[1] = j;
                    }
                    if (answer[0] < i)
                    {
                        answer[2] = i+1;
                    }
                    if (answer[3] < j+1)
                    {
                        answer[3] = j+1;
                    }
                }
            }
        }
        return answer;
    }
}
728x90
반응형
달리기 경주 문제

 

내 코드
using System;
using System.Collections.Generic;
using System.Linq;
public class Solution {
    public string[] solution(string[] players, string[] callings) {
        List<string> answer = new List<string>();
        Dictionary<string, int> resultDic = new Dictionary<string, int>();
        List<string> list = new List<string>();
        int num = 0;
        foreach(string player in players)
        {
            resultDic.Add(player, num);
            num++;
        }
        foreach(string call in callings)
        {
            int n = resultDic[call];
            string name = players[n - 1];
            players[resultDic[call]-1] = call;
            
            //추월당한 사람 이름
            //var _key = resultDic.FirstOrDefault(x => x.Value == resultDic[call] - 1).Key;
            
            players[resultDic[call]] = name;
            
            resultDic[name]++; //추월 당한 사람 순위 ++
            resultDic[call]--; //추월 하려는 사람 순위 --

        }
        return players;
    }
}
728x90
반응형

이문제는 두 점을 이용해서 기울기를 구하는 방법를 알고 있어야 한다. 당연하게도 평행이 되려면 기울기가 같으면 됨.

기울기가 m , y절편이 n인 직선의 방정식 >> y = mx +n
직선의 두점 (x1, y1), (x2, y2)를 지날때,
기울기 = (y값의 증가량) / (x값의 증가량) == (y1 -y2) / (x1- x2)

평행 문제

내 코드
using System;

public class Solution { //기울기 구하기
    public int solution(int[,] dots) {
        if((double)(dots[0,0] - dots[1,0]) / (dots[0,1] - dots[1,1]) == (double)(dots[2,0] - dots[3,0]) / (dots[2,1] - dots[3,1]))
        {
            return 1;
        }
        if((double)(dots[0,0] - dots[2,0]) / (dots[0,1] - dots[2,1]) == (double)(dots[1,0] - dots[3,0]) / (dots[1,1] - dots[3,1]))
        {
            return 1;
        }
        if((double)(dots[0,0] - dots[3,0]) / (dots[0,1] - dots[3,1]) == (double)(dots[1,0] - dots[2,0]) / (dots[1,1] - dots[2,1]))
        {
            return 1;
        }
        return 0;
    }
}
728x90
반응형

+ Recent posts