11일차 2024.10.31(알고리즘 2?일차)

칙촉·2024년 10월 30일

🎯시작 전 목표

1.알고리즘 문제 풀기

💻Today I learned

알고리즘 문제 풀기

  • 모의고사

문제의 내용이 영 남 일같지 않을것은 기분 탓일까?

import java.util.*;
class Solution {
    public List<Integer> solution(int[] a) {
        int[][] b ={ {1,2,3,4,5},{2,1,2,3,2,4,2,5},{3,3,1,1,2,2,4,4,5,5} };//수포자 친구들을 한 배열에 통일
        int[] c = new int[3] ;	//수포자 친구들이 기적적으로 맞은 문제의 수
        int d=0; 				//가장 많이 맞은 수포자의 맞은 문제수
        List<Integer> e = new ArrayList<>(); //수포자 시상대

        for(int i=0;i<a.length;i++)	//얘들아~ 답안 비교해보자~
        {
            for(int j=0;j<3;j++)   //끼리끼리 논다고 다 같이 모여 채점을 하는 모습
            {   //친구들마다 각자의 패턴이 있기 때문에 해당 패턴의 길이를 문제번호로 나누면 찍은 답이 나온다.
                if(b[j][i%b[j].length]==a[i])  //어!! 나 하나 맞았다!!
                    c[j]++;
            }
        }
        for(int i=0;i<3;i++) 	//누가 제일 많이 맞았냐?
            if(c[i]>d) d=c[i];
        for(int i=0;i<3;i++)	//어 나돈데
            if(c[i]==d) e.add(i+1);

        return e;
    }
}

경험자로서 한 마디 하자면, 3점짜리 쉬운 문제부터 다 푼 뒤에, 끝나기 15분 전 서술형 찍먹좀 하다가, 끝나기 5분 전에 나온 번호의 수를 모두 세고 가장 적은 번호 하나로 통일해 찍는 것이 가장 효과가 좋았다.


  • 소수 만들기

    import java.util.*;
    
    class Solution {
        public int solution(int[] n) {
            int a =0;	
            List<Integer> b= new ArrayList<Integer>(); //이미 나온 소수를 또 연산하는 것을 방지하기 위해 리스트에 저장
    
            for(int i=0;i<n.length-2;i++)
            {for(int j=i+1;j<n.length-1;j++)
              {for(int k=j+1;k<n.length;k++)
                {
                  if(IsPrime(n[i]+n[j]+n[k],b))  //is소수?
                      a++;		//yeah
                }
              }
            }
            return a;
        }
        public boolean IsPrime(int a, List<Integer> b)
        {
            if(b.contains(a)) return true; //이미 나온 소수일 시 참을 반환
           
            for(int i=2;i<a;i++) //simple하게 소수인지 계산
            {
                if(a%i==0) return false;
            }
            b.add(a); // 소수 list에 저장
            return true;
        }
    }

  • 모의고사

    아 세로드립 또 너야?

문제가 읽기 귀찮은 관계로 예시로 문제를 유추

class Solution {
    public int solution(int n, int m, int[] b) {
        int a = 0;
        int[] c= new int[n+1]; //칠해진 영역 확인용 배열
     
        for(int i=0;i<b.length;i++)
        {
            if(c[b[i]]==0)	//is 칠해진 영역?
            {
                for(int j=b[i];j<b[i]+m;j++) //칠.영~ 칠영+롤러길이까지 칠하기
                {
                    if(j>n)break;
                    c[j]=1;	//칠
                }
                a++;		//칠한 횟수 카운팅
            }   
        }        
        return a;
    }
}

  • 기사단원의 무기

class Solution {
    public int solution(int n, int c, int d) {
        int a=0;
        int[] b= new int[n];
     
        for(int i=0;i<n;i++)
        {
            b[i]=MeasureNum(i+1);
            if(b[i]>c) a+=d;
            else a+=b[i];
        }
        return a;
    }
  
    public int MeasureNum(int a)
    {
        int b=0;
        for(int i=1;i*i<=a;i++)
        {
            if(i*i==a) b++;
            else if(a%i==0) b+=2;
        }
        return b;
    }
}

  • 기사단원의 무기

    갈수록 길어지는 비문학 지문..
      class Solution {
        public int[] solution(int[] c, int[] d) {
            int[] a= {7,7} ;
    
            for(int i=0;i<c.length;i++)
            {
                if(c[i]==0)
                {
                    a[0]--;
                    continue;
                }
                for(int j=0;j<c.length;j++)
                {
                    if(c[i]==d[j]) 
                    {
                        a[0]--;
                        a[1]--;
                        break;
                    } 
                }
            }
            a[0]= a[0]>6? 6: a[0];
            a[1]= a[1]>6? 6: a[1];
            return a;
        }
    }

  • 옹알이(2)

    응애
    import java.util.*;
    class Solution {
        public int solution(String[] b) {
            int d = 0;    //한 번에 문자열을 쏙쏙 빼먹기 위해 contains를 사용할 수 있는 List를 사용했다.
            List<String> a = new ArrayList<>(); 
            a.add("aya");  	//각 옹알이를 List에 넣는다.
            a.add("ye");
            a.add("woo");
            a.add("ma");
    
            for (int i = 0; i < b.length; i++){ //몇 개의 옹알이가 가능한 지 검토해보자
                String[] c = {"",""};	//이전 옹알이와 연속으로 사용하지 못하게 배열로 관리
                for (int j = 0; j < b[i].length(); j++){ //각 옹알이의 길이만큼 반복해,
                    c[0] += b[i].charAt(j);			//c[0]배열에 추가해 준다.
                    if ( !c[1].equals(c[0]) && a.contains(c[0]))
                    {	//만일 이전 발음와 같지 않으면서, 해당하는 발음의 List에 도달했을 시,
                        c[1] = c[0];	//'이전 발음'에 현 발음를 저장 및
                        c[0] = "";		//다음 반복에 쓰기 위해 현 발음를 비운다.
                    }
                }
                if (c[0].isEmpty()) d ++; //현 발음이 비어있다면, 모든 발음이 이전 발음으로 넘어간 
            }							  //것이기 때문에 발음 가능한 옹알이로, 개수에 1을 추가해준다.
           return d;
        }
    }
profile
강세민

0개의 댓글